2016-07-20 11 views
0
let html = '<body><p id="a"></p><script>document.getElementById("a").innerHTML = "hello"</script></body>' 
let doc = document.implementation.createHTMLDocument('') 
doc.open() 
doc.write(html) 
doc.close() 
doc.getElementById('a').innerHTML // expecting "hello" but get an empty string instead 

Das HTML-Dokument von document.implementation.createHTMLDocument erstellt JavaScript scheint nicht darin zu laufen.Erstellen Sie ein Document-Objekt, führen Sie JavaScript aus, und erhalten Sie endgültigen HTML

+1

keine Sie können kein Javascript in Fragment Dokumente auszuführen, verwenden Sie einen Iframe (Sie werden es im Hauptdokument anfügen müssen), um die Browser-Kompatibilität – Kaiido

+0

zu überprüfen. https://developer.mozilla.org/en-US/docs/Web/API/DOMimplementation/createHTMLDocument –

Antwort

0

überprüfen Sie diese einfache Methode, die für Sie arbeiten kann.

let html = '<body><p id="a"></p><script>document.getElementById("a").innerHTML = "hello"</scr'+'ipt></body>'; 
     document.open(); 
     document.write(html); 
     document.close(); 
+0

Es ersetzt alles im aktuellen Fenster ... – Ethan

+0

Ohh lass mich andere Lösung finden, werde auf Sie zurückkommen –

0

Dank Kaiidos Kommentar. Der folgende Code funktioniert so, wie ich will:

let html = '<body><p id="a"></p><script>document.getElementById("a").innerHTML = "hello"</script></body>' 
let iframe = document.createElement('iframe') 
iframe.style.display = 'none' 
document.body.appendChild(iframe) 
let doc = iframe.contentWindow.document 
doc.open() 
doc.write(html) 
doc.close() 
doc.getElementById('a').innerHTML 
+0

I denke ich erinnere mich, dass einige Browser den Inhalt eines iframes nicht mit 'display: none' laden, sei vorsichtig, und du solltest die 'width' und' height' deines iframes auf 0 setzen und stattdessen vom Bildschirm weg schieben . Außerdem haben Sie vergessen, Ihre '' Ending-Tag-Deklaration in der 'html'-Zeichenkette zu entgehen. Ich nehme an, Sie haben es auf Ihrer Seite repariert, sonst hätte das Skript hier mit einem schönen "unterminated string literal" -Fehler aufgehört. (es sollte '<\/script>' sein. – Kaiido

+0

Danke für Ihren Vorschlag! Der obige Code funktioniert gut in Chrome, das ist gut genug für meinen Anwendungsfall. – Ethan

Verwandte Themen