Почему этот JavaScript (с использованием document.open и document.write) не работает в Internet Explorer или Opera?

Мне очень нужна помощь в этом.

Я создал <script>, который тесно связан и воспроизводит проблему другого, более сложного <script>, который я написал в другом месте.

Вот что он делает:

создает <iframe> и вставляет в <div> на страницесоздает и добавляет документ к этому <iframe>, который содержит <script>, который определяет несколько функций (включая функцию обратного вызова и функцию, которая загружает внешний <script> с использованием AJAX)последний внешний скрипт - это просто вызов функции обратного вызова, которая вызывает функцию, которая создает документ и добавляет его к <iframe>, в котором он находится; это должно эффективно переписать <скрипт>

Три вовлеченных файла:

http://troy.onespot.com/static/document_write/index.html (главная страница)http://troy.onespot.com/static/document_write/main.js (первый <script>, который загружен)http://troy.onespot.com/static/document_write/jsonp.js (<скрипт>, загруженный методом jQuery $ .ajax ())

Это все работает в Firefox, Safari и Chrome. Где это ломается в Internet Explorer и Opera. Что происходит, так это то, что функция render () в main.js выполняется, и все три предупреждения запускаются, но документ в <iframe> не перезаписывается. Я не могу сказать, какой документ создается или записывается, или он вообще есть.

Если я добавлю код отладки (например, console.log (document)) в начало функции render (), работающие браузеры, похоже, получат указатель на существующий документ <iframe> и перечисят свойства, включенные ниже. Internet Explorer также может найти какой-то документ. Я просто не могу сказать, почему он не позволяет мне перезаписать это.

Может ли это быть проблемой объема? Может быть, я неправильно использую методы document.write (), document.open () или document.close (), а Firefox и несколько других браузеров просто позволяют мне сойти с рук?

Одна возможная подсказка: если я вытащу из себя функции функции render (), то есть просто добавлю их после load () в main.js), это работает нормально. Это наводит меня на мысль, что дело не в том, как я использую document.open () и т. Д., А в том, что к моменту выполнения функции callback () объект документа недоступен или вышел из области видимости, или что-то типа того.

Это поставило меня в тупик, и это для очень важного проекта с приближающимся сроком. Я не выше взлома или обходного пути, если это вытащит меня из этого варенья. Любая помощь или понимание будут чрезвычайно признательны!

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

Ответы на вопрос(6)

Ваш ответ на вопрос