後からロードした外部JSファイルでdocument.writeする(1)

※1157010937の回答の3/4

ファイルの読み込み後にロードした外部JSファイルでdocument.writeするときの問題点を洗います。


【writer.js】
// document.writeする
var str = '<div style="background-color:orange;">外部JSファイルによって作成されたHTML要素です。</div>';
document.write(str);



// HTML側からのチェック用
function writer() {
  alert("./writer.jsが読み込まれています。");
}



// ステータスバーでのチェック用
status += " Load!";


<html>
<head>
<script type="text/javascript"><!--



function viewSource(id) {
  if(document.body) {
    alert("ソースビュー " + id + "\n" + document.body.parentNode.innerHTML);
  } else {
    alert("ソースビュー " + id + "\n" + "<body>がまだ出現していない");
  }
}



viewSource(0);



function test(str) {
  document.writeln(str);
}



function writeScriptTag() {
  test('<script type="text/javascript" src="./writer.js" charset="Shift_JIS"></' + 'script>');
}



function writeAfterLoad() {
  test('あいう');
  // writeScriptTag();
}



function writeInInnerHTML() {
  // ↓擬似受信電文
  var str = '<div>scriptタグの直前<script type="text/javascript" src="./writer.js" charset="Shift_JIS"><' + '/script>scriptタグの直後</div>';
  document.getElementById("target").innerHTML = str;
}



viewSource(1);



test('<title>てすと</title>');



viewSource(2);



//--></script>
</head>
<body>



<div><input type="button" onclick="viewSource();" value="ソースチェック" /></div>



<hr />
※HTMLのタグを直接書いてある場合
<div>外部JSファイルの前</div>
<script type="text/javascript" src="./writer.js" charset="Shift_JIS"></script>
<div>外部JSファイルの後</div>



<hr />
※HTMLのタグをdocument.writeした場合
<script type="text/javascript"><!--



  viewSource(10);
test('<div>外部JSファイルの前</div>');
  viewSource(11);
writeScriptTag();
  viewSource(12);
test('<div>外部JSファイルの後</div>');
  viewSource(13);



//--></script>



<hr />



<div onclick="viewSource(20);writeAfterLoad();viewSource(21);">クリックでdocument.write();</div>



<hr />



<div onclick="viewSource(30);writeInInnerHTML();viewSource(31);">クリックで質問と同じ状況</div>



<div id="target" style="border:solid 1px black"></div>



</body>
</html>

※このサンプルは、1157010937の回答の2/4のおさらいができるようになっているので、その部分の説明は省略します。

まず、HTMLのタグが直接書いてあり、外部JSファイルを読み込む<script>タグも直接書いてある場合は、外部JSファイルのdocument.writeも意図した場所に書かれています。

次に、外部JSファイルを読み込む<script>タグを、HTMLのロード中に他のタグと一緒にdocument.writeした場合、一緒に書いた他のタグの後に外部JSファイルのdocument.writeの内容が書かれています。

また、HTMLのロード後にdocument.writeするとページが変わってしまうのでNGです。

さらに、innerHTMLの中に<script>タグがあっても動作しません。