2016-07-20 5 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 

document.implementation.createHTMLDocumentで作成されたHTML文書は、JavaScriptを内部で実行していないようです。Documentオブジェクトを作成し、JavaScriptを実行して最終的なHTMLを取得します

+1

を(あなたがメイン文書でそれを追加する必要があります) – Kaiido

+0

ブラウザの互換性を確認してください。 https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createHTMLDocument –

答えて

0

あなたのために働くことができるこの簡単な方法をチェックしてください。

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

これは現在のウィンドウにあるすべてのものを置き換えます。 – Ethan

+0

私は他の解決策を見つけることができます。 –

0

Kaiidoさんのコメントありがとうございます。次のコードは、私が望むように動作します:何あなたはインラインフレームを使用して、フラグメント文書でJavaScriptを実行することはできません

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

私はiframeの内容を 'display:none'で読み込まないブラウザもありますので注意してください。iframeの' width'と 'height'を0に設定し、代わりに画面外にプッシュしたい場合があります。また、 'html'文字列の' '終了タグ宣言をエスケープするのを忘れました。私はあなたの側でそれを修正したと思います。さもなければ、スクリプトはここでいい "終わりのない文字列リテラル"エラーで止まっていました。 (これは '<\/script>'。 – Kaiido

+0

あなたの提案をありがとう!上記のコードは、私のユースケースに十分なChromeでうまくいきます。 – Ethan

関連する問題