したいこと
- 外部ドメイン上に、
document.write
でhtmlタグを記述しているスクリプトがある。(これは前提となります) - 上記を呼び出して、
document.write
を実行し、タグ文字列を取得する。(それを任意の場所にappedする等、加工する) - ただし、同期的に読み込むのではなく、非同期に読み込む必要がある。(これは前提となります)
非同期に読み込んだ場合、下記エラーが発生する。
Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.
http://so-zou.jp/web-app/tech/programming/javascript/dom/node/document/
に記載がある通り、
非同期で読み込まれる外部スクリプトからは、document.write()を実行できません。
上記をどうにかしたい。
サンプルコード
外部js
js
1 document.writeln("<div id='additional'>here is additional dom</div>");
html
下記、動作するケース
html
1 <!DOCTYPE html> 2 <html lang="ja"> 3 <head> 4 <meta charaset="UTF-8"> 5 <title>document write by external domain script</title> 6 </head> 7 <body> 8 <div class="wrapper"> 9 <h1>document write by external domain script</h1> 10 <p>sample text. sample text. sample text. sample text. sample text. sample text.</p> 11 <div id="target"> 12 here is target. 13 <!-- これは動く --> 14 <script src="http://example.com/js/script.js"></script> 15 </div> 16 </div> 17 </body> 18 </html>
下記、動作しないケース(先のエラーが発生する)
これを何かしらの方法で動作するようにしたい。
html
1 <!DOCTYPE html> 2 <html lang="ja"> 3 <head> 4 <meta charaset="UTF-8"> 5 <title>document write by external domain script</title> 6 </head> 7 <body> 8 <div class="wrapper"> 9 <h1>document write by external domain script</h1> 10 <p>sample text. sample text. sample text. sample text. sample text. sample text.</p> 11 <div id="target"> 12 here is target. 13 </div> 14 </div> 15 16 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 17 <script> 18 // # これはエラーになる 19 $(function() { 20 $('#target').after( 21 $("<script>").attr({src: "http://example.com/js/script.js"}) 22 ); 23 }); 24 </script> 25 </body> 26 </html>
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー