Почему этот 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