Pourquoi n'est-ce pas le JavaScript (à l'aide de document.ouvrir et document.écrire) dans Internet Explorer ou Opera?

J'ai désespérément besoin d'un peu d'aide sur ce point.

J'ai créé un <script> qui suit de près, et reproduit le problème de l', l'autre, plus complexe <script> que j'ai écrit ailleurs.

Voici ce qu'il fait:

  • crée un <iframe> et l'insère dans un <div> sur la page
  • crée et ajoute un document pour que <iframe> qui contient un <script> qui définit un peu de fonctions (y compris une fonction de rappel et une fonction qui charge un externe <script> à l'aide d'AJAX)
  • le dernier script externe est juste un appel à la fonction de rappel, qui appelle une fonction qui crée un document et l'ajoute à la <iframe> c'est; cela devrait effectivement remplacer les <script>

Les trois fichiers concernés sont:

Tout cela fonctionne dans Firefox, Safari et Chrome. Où il se décompose est dans Internet Explorer et Opera. Ce qui se passe est que le render() de la fonction dans main.js s'exécute, et tous les trois alertes sont licenciés, mais le document dans le <iframe> n'est pas remplacé. Je ne peux pas dire ce document est en cours de création ou d'écriture, ou si l'on est.

Si j'ajoute le code de débogage (comme la console.log(document)) au début du render() de la fonction, le travail navigateurs semblent obtenir une poignée sur l'existant <iframe> document et la liste des biens inscrits ci-dessous. Internet Explorer apparaît également trouver un document quelconque. Je ne peux pas dire pourquoi c'est ne pas me laisser écraser.

Pourrait-il être un problème de portée? Peut-être que je suis en utilisant le document.write(), document.open() ou d'un document.close() les méthodes de mal, et Firefox et quelques autres navigateurs sont juste me laisser sortir avec elle?

Un possible indice: si je prends le courage de le render() de la fonction (c'est à dire, il suffit de les placer après le chargement() dans main.js), cela fonctionne très bien. Qui me donne à penser que ce n'est pas la façon dont je suis l'aide de document.open(), etc., mais qu'en quelque sorte, par le temps que le rappel() la fonction est exécutée, l'objet document n'est pas disponible, ou a disparu hors de portée, ou quelque chose comme ça.

Cela m'a totalement perplexe, et c'est pour un très important projet avec une approche de la date limite. Je ne suis pas au-dessus d'un hack ou une solution de contournement si il me fait sortir de cette ornière. Toute aide ou des connaissances serait EXTRÊMEMENT apprécié!

de la console.journal (le)'liste des propriétés du document:

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 
la méthode addEventListener: la fonction addEventListener() { 
adoptNode: fonction adoptNode() { 
alinkColor: "" 
tous: HTMLCollection 
ancres: HTMLCollection 
appendChild: fonction appendChild() { 
les applets: HTMLCollection 
attributs: null 
baseURI: "http://localhost/projects/test/ajax_loader/document_write/index.html" 
bgColor: "" 
corps: HTMLBodyElement 
captureEvents: fonction captureEvents() { 
characterSet: "UTF-8" 
charset": "UTF-8" 
childNodes: NodeList 
claire: function effacer() { 
cloneNode: fonction cloneNode() { 
à proximité: function fermer() { 
compareDocumentPosition: fonction compareDocumentPosition() { 
compatMode: "BackCompat" 
cookie: "__gads=ID=62bb88ab20ac9451:T=1256683145:S=ALNI_Mbso-nFjAvRzYhCSwhiuaDh84G8CA" 
createAttribute: fonction createAttribute() { 
createAttributeNS: fonction createAttributeNS() { 
createCDATASection: fonction createCDATASection() { 
createComment: fonction createComment() { 
createDocumentFragment: fonction createDocumentFragment() { 
createElement: la fonction createElement() { 
createElementNS: fonction createElementNS() { 
createEntityReference: fonction createEntityReference() { 
createEvent: fonction createEvent() { 
createExpression: fonction createExpression() { 
createNSResolver: fonction createNSResolver() { 
createNodeIterator: fonction createNodeIterator() { 
createProcessingInstruction: fonction createProcessingInstruction() { 
createRange: fonction createRange() { 
createTextNode: fonction createTextNode() { 
createTreeWalker: fonction createTreeWalker() { 
defaultCharset: "iso-8859-1" 
defaultView: DOMWindow 
designMode: "off" 
dir: "" 
dispatchEvent: fonction dispatchEvent() { 
doctype: null 
documentElement: HTMLHtmlElement 
documentURI: "http://localhost/projects/test/ajax_loader/document_write/index.html" 
domaine: "localhost" 
elementFromPoint: fonction elementFromPoint() { 
intègre: HTMLCollection 
évaluer: la fonction evaluate() { 
execCommand: fonction execCommand() { 
fgColor: "" 
firstChild: HTMLHtmlElement 
formes: HTMLCollection 
getCSSCanvasContext: fonction getCSSCanvasContext() { 
getElementById: la fonction getElementById() { 
getElementsByClassName: fonction getElementsByClassName() { 
getElementsByName: fonction getElementsByName() { 
getElementsByTagName: fonction getElementsByTagName() { 
getElementsByTagNameNS: fonction getElementsByTagNameNS() { 
getOverrideStyle: fonction getOverrideStyle() { 
getSelection: fonction getSelection() { 
hasAttributes: fonction hasAttributes() { 
hasChildNodes: fonction hasChildNodes() { 
possèdefocus: fonction possèdefocus() { 
hauteur: 150 
images: HTMLCollection 
mise en œuvre: DOMImplementation 
importNode: fonction importNode() { 
inputEncoding: "UTF-8" 
insertBefore: fonction insertBefore() { 
isDefaultNamespace: fonction isDefaultNamespace() { 
isEqualNode: fonction isEqualNode() { 
isSameNode: fonction isSameNode() { 
isSupported: fonction isSupported() { 
jQuery1258269389622: 2 
lastChild: HTMLHtmlElement 
lastModified: "" 
linkColor: "" 
liens: HTMLCollection 
localName: null 
emplacement: emplacement 
lookupNamespaceURI: fonction lookupNamespaceURI() { 
lookupPrefix: fonction lookupPrefix() { 
namespaceURI: null 
nextSibling: null 
nodeName: "document#" 
nodeType: 9 
nodeValue: null 
normaliser: la fonction normalize() { 
ouvert: la fonction open() { 
ownerDocument: null 
parentElement: null 
parentNode: null 
plugins: HTMLCollection 
preferredStylesheetSet: null 
préfixe: null 
previousSibling: null 
queryCommandEnabled: fonction queryCommandEnabled() { 
queryCommandIndeterm: fonction queryCommandIndeterm() { 
queryCommandState: fonction queryCommandState() { 
queryCommandSupported: fonction queryCommandSupported() { 
queryCommandValue: fonction queryCommandValue() { 
querySelector: fonction querySelector() { 
querySelectorAll: fonction querySelectorAll() { 
readyState: "compléter" 
référent: "http://localhost/projects/test/ajax_loader/document_write/index.html" 
releaseEvents: fonction releaseEvents() { 
removeChild: fonction removeChild() { 
removeEventListener: fonction removeEventListener() { 
replaceChild: fonction replaceChild() { 
scripts: HTMLCollection 
selectedStylesheetSet: null 
les feuilles de style: StyleSheetList 
textContent: null 
titre: "Page" 
vlinkColor: "" 
largeur: 300 
écrire: la fonction write() { 
writeln: fonction writeln() { 
xmlEncoding: null 
xmlStandalone: faux 
xmlVersion: null
Rencontrez-vous des erreurs?
Salut meder - je ne suis pas le voir de toute les erreurs dans Internet Explorer ou Opera. À la fois tout simplement l'affichage de l'alerte (le)s dans le render() de la fonction, mais ne pas faire n'importe quoi avec le document dans le <iframe>.
regardez: stackoverflow.com/questions/12467151/...

OriginalL'auteur Bungle | 2009-11-15