¿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

Respuestas a la pregunta(6)

Su respuesta a la pregunta