¿Por qué no funciona este JavaScript (con document.open y document.write) en Internet Explorer u Opera?
Necesito ayuda desesperadamente en este caso.
He creado un <script> que se asemeja mucho a, y reproduce el problema de, otro <script> más complejo que he escrito en otro lugar.
Esto es lo que hace:
crea un <iframe> y se inserta en un <div> en la páginacrea y agrega un documento a ese <iframe>, que contiene un <script> que define algunas funciones (incluida una función de devolución de llamada y una función que carga un <script> externo utilizando AJAX)el último script externo es solo una llamada a la función de devolución de llamada, que llama a una función que crea un documento y lo agrega al <iframe> en el que está; esto debería sobrescribir efectivamente el <script>Los tres archivos involucrados son:
http://troy.onespot.com/static/document_write/index.html (la página principal)http://troy.onespot.com/static/document_write/main.js (el primer <script> que está cargado)http://troy.onespot.com/static/document_write/jsonp.js (el <script> cargado por el método $ .ajax () de jQuery)Todo esto funciona en Firefox, Safari y Chrome. Donde se descompone es en Internet Explorer y Opera. Lo que sucede es que la función render () en main.js se ejecuta, y las tres alertas se activan, pero el documento en el <iframe> no se sobrescribe. No puedo decir qué documento se está creando o escribiendo, o si lo está.
Si agrego código de depuración (como console.log (documento)) al principio de la función render (), los navegadores que funcionan parecen tener un control sobre el documento existente <iframe> y listan las propiedades incluidas a continuación. Internet Explorer también parece encontrar un documento de algún tipo. Simplemente no puedo decir por qué no me permite sobrescribirlo.
¿Podría ser una cuestión de alcance? ¿Tal vez estoy usando los métodos document.write (), document.open () o document.close () de forma incorrecta, y Firefox y algunos otros navegadores me están dejando escapar?
Una posible pista: si elimino las entrañas de la función render () (es decir, solo colóquelas después de load () en main.js), esto funciona bien. Eso me sugiere que no es así como estoy utilizando document.open (), etc., sino que de alguna manera, cuando se ejecuta la función de devolución de llamada (), el objeto de documento no está disponible o ha salido de su alcance, o algo así.
Esto me tiene totalmente perplejo, y es para un proyecto muy importante con un plazo inminente. No estoy por encima de un truco o una solución alternativa si me saca de este atasco. Cualquier ayuda o conocimiento sería muy apreciado!
La lista de las propiedades del documento de console.log ():
ATTRIBUTE_NODE: 2 CDATA_SECTION_NODE: 4 COMMENT_NODE: 8 DOCUMENT_FRAGMENT_NODE: 11 DOCUMENT_NODE: 9 DOCUMENT_POSITION_CONTAINED_BY: 16 DOCUMENT_POSITION_CONTAINS: 8 DOCUMENT_POSITION_DISCONNECTED: 1 DOCUMENT_POSITION_FOLLOWING: 4 DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 32 DOCUMENT_POSITION_PRECEDING: 2 DOCUMENT_TYPE_NODE: 10 ELEMENT_NODE: 1 ENTITY_NODE: 6 ENTITY_REFERENCE_NODE: 5 NOTATION_NODE: 12 PROCESSING_INSTRUCTION_NODE: 7 TEXT_NODE: 3 URL: "http://localhost/projects/test/ajax_loader/document_write/index.html" activeElement: HTMLBodyElement addEventListener: function addEventListener() { adoptNode: function adoptNode() { alinkColor: "" all: HTMLCollection anchors: HTMLCollection appendChild: function appendChild() { applets: HTMLCollection attributes: null baseURI: "http://localhost/projects/test/ajax_loader/document_write/index.html" bgColor: "" body: HTMLBodyElement captureEvents: function captureEvents() { characterSet: "UTF-8" charset: "UTF-8" childNodes: NodeList clear: function clear() { cloneNode: function cloneNode() { close: function close() { compareDocumentPosition: function compareDocumentPosition() { compatMode: "BackCompat" cookie: "__gads=ID=62bb88ab20ac9451:T=1256683145:S=ALNI_Mbso-nFjAvRzYhCSwhiuaDh84G8CA" createAttribute: function createAttribute() { createAttributeNS: function createAttributeNS() { createCDATASection: function createCDATASection() { createComment: function createComment() { createDocumentFragment: function createDocumentFragment() { createElement: function createElement() { createElementNS: function createElementNS() { createEntityReference: function createEntityReference() { createEvent: function createEvent() { createExpression: function createExpression() { createNSResolver: function createNSResolver() { createNodeIterator: function createNodeIterator() { createProcessingInstruction: function createProcessingInstruction() { createRange: function createRange() { createTextNode: function createTextNode() { createTreeWalker: function createTreeWalker() { defaultCharset: "iso-8859-1" defaultView: DOMWindow designMode: "off" dir: "" dispatchEvent: function dispatchEvent() { doctype: null documentElement: HTMLHtmlElement documentURI: "http://localhost/projects/test/ajax_loader/document_write/index.html" domain: "localhost" elementFromPoint: function elementFromPoint() { embeds: HTMLCollection evaluate: function evaluate() { execCommand: function execCommand() { fgColor: "" firstChild: HTMLHtmlElement forms: HTMLCollection getCSSCanvasContext: function getCSSCanvasContext() { getElementById: function getElementById() { getElementsByClassName: function getElementsByClassName() { getElementsByName: function getElementsByName() { getElementsByTagName: function getElementsByTagName() { getElementsByTagNameNS: function getElementsByTagNameNS() { getOverrideStyle: function getOverrideStyle() { getSelection: function getSelection() { hasAttributes: function hasAttributes() { hasChildNodes: function hasChildNodes() { hasFocus: function hasFocus() { height: 150 images: HTMLCollection implementation: DOMImplementation importNode: function importNode() { inputEncoding: "UTF-8" insertBefore: function insertBefore() { isDefaultNamespace: function isDefaultNamespace() { isEqualNode: function isEqualNode() { isSameNode: function isSameNode() { isSupported: function isSupported() { jQuery1258269389622: 2 lastChild: HTMLHtmlElement lastModified: "" linkColor: "" links: HTMLCollection localName: null location: Location lookupNamespaceURI: function lookupNamespaceURI() { lookupPrefix: function lookupPrefix() { namespaceURI: null nextSibling: null nodeName: "#document" nodeType: 9 nodeValue: null normalize: function normalize() { open: function open() { ownerDocument: null parentElement: null parentNode: null plugins: HTMLCollection preferredStylesheetSet: null prefix: null previousSibling: null queryCommandEnabled: function queryCommandEnabled() { queryCommandIndeterm: function queryCommandIndeterm() { queryCommandState: function queryCommandState() { queryCommandSupported: function queryCommandSupported() { queryCommandValue: function queryCommandValue() { querySelector: function querySelector() { querySelectorAll: function querySelectorAll() { readyState: "complete" referrer: "http://localhost/projects/test/ajax_loader/document_write/index.html" releaseEvents: function releaseEvents() { removeChild: function removeChild() { removeEventListener: function removeEventListener() { replaceChild: function replaceChild() { scripts: HTMLCollection selectedStylesheetSet: null styleSheets: StyleSheetList textContent: null title: " Page" vlinkColor: "" width: 300 write: function write() { writeln: function writeln() { xmlEncoding: null xmlStandalone: false xmlVersion: null