2009-11-15 5 views
7

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:

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
+0

Haben Sie Fehler? –

+0

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