プロが教える店舗&オフィスのセキュリティ対策術

画面で各ページの共通する部分をJavaScriptで作って、外出しファイルにし、それぞれのページで使っています。
つまり、
<script language=JavaScript1.2 src=xxx.js></script>
としているわけですが、その外出ししたスクリプトファイルの中で、さらに別のスクリプトファイルを入れ子状態で使っています。
つまり、上記の「xxx.js」の中で、
document.write("<script LANGUAGE=JavaScript1.2 src=yyy.js></script>\n");
としているわけです。
NN4.78では、うまく行っていると思ったのですが、IE5.5で見たら、表示がおかしいことに気づきました。
このyyy.jsでテーブルを定義し、テーブルを途中まで吐き出して、残りはxxx.jsで吐き出しています。
ところが、IEでブラウズすると、xxx.jsで吐き出す残りの部分がyyy.jsで吐き出す<table><tr>・・・より前に来てしまします。
(・_・")?

IEではJavaScriptの入れ子は認識できないのでしょうか?
やっぱり、IEだからですかね?

A 回答 (1件)

出来る出来ないではなく考え方の相違。


これは実行順が親(前半)→子→親(後半)ではなく親(前半)→親(後半)→子のようになるからである。
バグではなく仕様。
IEではプログラムが実行された後に書き込んだ命令を読み込むので上記のように実行されたこととなる。
つまりいったん親のjavascriptが書き込んだ後(この状態では子のscriptは読み込まれていない),書き込まれた文章を認識し子のscriptを実行する。
IE/NNで同じ動作で行う場合は FUNCTION 化しておき関数として読み込む。

以下SAMPLE/

>>HTML

<html>
<head>
</head>
<body>
<script language=JavaScript1.2 src=outfile2.js></script>
<script language=JavaScript1.2 src=outfile.js></script>
</body>
</html>

>>outfile.js

document.write("****************************\n");
out2();
document.write("****************************\n");

>>outfile2.js

function out2(){
document.write("<TABLE><TR><TD>DATA SET------------>></TD></TR></TABLE>\n");
}

この回答への補足

>バグではなく仕様。
私もそのように思ったので、「IEは・・・」と書きました。
バグとは思っていません。

ただ、質問を出してからも色々実験してみると、子を呼ぶ時に、つまり、
document.write("<script LANGUAGE=JavaScript1.2 src=yyy.js></script>\n");
の部分で「yyy.js」を絶対パスで書くと上記の現象が起き、相対パスで書けば起きないらしいことがわかってきました。
もう少し色々実験してみようと思います。
アドバイスありがとうございました。

補足日時:2002/05/23 19:27
    • good
    • 0
この回答へのお礼

仲間内でこの問題について話し合い、結論としては「やっぱりM社の製品だからだね。ネスティングも出来ないなんてアプリケーションとしては最低だね。これは不具合だ」ということになりました。
従って、
<script language=JavaScript1.2 src=yyy.js></script>
<script language=JavaScript1.2 src=xxx.js></script>
と分けることにしました。

お礼日時:2002/05/25 17:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!