Ich brauche dringend Hilfe bei diesem.Warum funktioniert dieses JavaScript (mit document.open und document.write) nicht in Internet Explorer oder Opera?
Ich habe ein <Skript> geschaffen, die eng Parallelen, und reproduziert das Problem, eine andere komplexere <Skript>, die ich an anderer Stelle geschrieben habe.
Hier ist, was es tut:
- ein <iframe> und fügt in in einen <div> auf der Seite
- erstellt und fügt ein Dokument zu diesem <iframe>, die eine < Skript enthält erstellt > definiert einige Funktionen (einschließlich einer Callback-Funktion und einer Funktion, die ein externes <Skript> mit AJAX lädt)
- Das letzte externe Skript ist nur ein Aufruf der Callback-Funktion, die eine Funktion aufruft, die ein Dokument erstellt und es an den <iframe> anfügt; Dies sollte die <Skript>
Die drei Dateien beteiligt sind effektiv überschreiben:
- http://troy.onespot.com/static/document_write/index.html (die Hauptseite)
- http://troy.onespot.com/static/document_write/main.js (das erste <Skript> das ist geladen)
- http://troy.onespot.com/static/document_write/jsonp.js (Das <Skript> geladen von jQuery's $ .ajax() Methode)
Das alles funktioniert in Firefox, Safari und Chrome. Wo es zusammenbricht ist im Internet Explorer und Opera. Was passiert ist, dass die render() -Funktion in main.js ausgeführt wird, und alle drei Warnungen ausgelöst werden, aber das Dokument in <iframe> wird nicht überschrieben. Ich kann nicht sagen, welches Dokument erstellt oder geschrieben wird, oder wenn überhaupt. Wenn ich am Anfang der Funktion render() Debugcode (wie console.log (document)) hinzufüge, scheinen die funktionierenden Browser das vorhandene Dokument <iframe> zu handhaben und die unten aufgeführten Eigenschaften aufzulisten. Der Internet Explorer scheint auch ein Dokument zu finden. Ich kann einfach nicht sagen, warum ich es nicht überschreiben darf.
Könnte es ein Problem des Umfangs sein? Vielleicht verwende ich die Methoden document.write(), document.open() oder document.close() nicht richtig, und Firefox und ein paar andere Browser lassen mich einfach davonkommen.
Ein möglicher Hinweis: Wenn ich die Eingeweide der render() -Funktion herausnehmen (d. H. Einfach nach dem Laden() in main.js), funktioniert das gut. Das deutet darauf hin, dass ich nicht document.open() usw. verwende, aber irgendwie, wenn die callback() - Funktion ausgeführt wird, ist das Dokumentobjekt nicht verfügbar oder hat den Gültigkeitsbereich verlassen. oder etwas ähnliches.
Das hat mich völlig ratlos, und es ist für ein sehr wichtiges Projekt mit einer bevorstehenden Frist. Ich bin nicht über einen Hack oder Workaround, wenn es mich aus diesem Stau bringt. Jede Hilfe oder Einsicht wäre EXTREM geschätzt!
console.log() 's Liste der Dokumenteigenschaften:
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
Haben Sie Fehler? –
Hi meder - Ich sehe keine Fehler in Internet Explorer oder Opera. Beide zeigen einfach die alert() s in der render() -Funktion an, aber nichts mit dem Dokument in der
Werfen Sie einen Blick auf: https://stackoverflow.com/questions/12467151/iframe-not-rendering-in-ie9-mode-when-captaining-page-is-in-quirks-mode –