コンポーネントが4つのJSファイルに分割されたレガシーJavaScriptアプリケーションを維持しています。
「Default.aspx」、「set1.aspx」、「set2.aspx」、「set3.aspx」です。ASPX ページは、それぞれのセットに属する複数の (まったく異なる) ソース ファイルから圧縮された JS を書き出し、コンテンツ タイプ ヘッダーを "text/javascript" に設定します。
アプリケーションは、最初のセットへの参照を追加し、メイン エントリ オブジェクトを作成することによって呼び出されます。
<script src="/app/default.aspx" type="text/javascript"></script>
<script type="text/javascript>
var ax;
// <body onload="OnLoad()">
function OnLoad() {
ax = new MyApp(document.getElementById("axTargetDiv"));
}
</script>
スクリプトの最初のセット (default.aspx) の最後には、次の正確なコードがあります。
function Script(src) {
document.write('<script src="' + src + '" type="text/javascript"></script>');
}
Script("set1.aspx?v=" + Settings.Version);
これにより、2 番目のスクリプト セット (set1.aspx) が読み込まれます。そして、これはすべての主要なブラウザー (IE6-8 Firefox Safari Opera Chrome) でエラーなしで動作します。
ただし、私は静かにこのスクリプトに取り組んでいるので、多くの場所で関数呼び出しを単純化し、上記のスクリプト関数を誤ってインライン化して、次のコードを作成したいと考えています。
document.write('<script src="set1.aspx?v=' + Settings.Version + '" type="text/javascript"></script>');
テストページでテストすると、すべてのブラウザーで次のエラーがスローされるようになりました。
MyApp is not defined.
これは次の行で発生します: ax = new MyApp(...
as Visual Studio JS debugger and Firebug report it.
この質問に投稿された最初の4つの回答でさまざまな方法を試しましたが、役に立ちませんでした。MyApp を正常にロードできるようにする唯一の方法は、実際の「スクリプトの追加」コードを関数 (つまりdocument.write('script')
行) 内に配置することだけです。
関数内に行を入れるとdocument.write
機能しますが、そうでない場合は機能しません。何が起こっていますか?
スクリプト テキストの分割および/またはエスケープは機能しません。