0

私は成熟段階のプロジェクトに不慣れです。ページの 1 つに多くの JS スクリプトとライブラリがあり、jQuery が集中的に使用されています。IE7/8 のみに奇妙なエラーがあります。ページ スクリプト実行の途中で jQuery オブジェクトが未定義になるため、他のすべてが機能しなくなります。

たとえば、次のように、HTML の途中で 2 つのスクリプトが指定されています。

<script src="script1.js"></script>
<script src="script2.js"></script>

script1呼び出された変数の最後には、jQuery期待どおりのオブジェクトが含まれていますが、script2変数の先頭でjQueryはすでに未定義です。間に何が起こりますか?

どこを見て、どのようにデバッグするかについてのアイデアをお願いします!

スクリプト実行の結果を制御し、結果の js 全体 (すべての js インクルードを含む) を 1 ページでデバッグする方法はありますか?

ありがとうございました!:)

更新します。私はパッチを作成しました: 最後にscript1、変数をバックアップします:

var jQueryBackup = jQuery;

最初script2に復元します:

if (!jQuery && jQueryBackup) jQuery = jQueryBackup;

これによりスクリプトは機能しましたが、変数が 2 つのスクリプト間で未定義になる可能性については説明されていません (文字どおり 2 行のコードの間と見なされます)。

4

2 に答える 2

0

あなたがデバッグしたいなら、これは私がすることです:

$.getScript("script1.js").done(function(script, textStatus) {
  console.log('script1 is loaded');
  $.getScript("script2.js").done(function(s,t){
     console.log('script1.js is loaded');
  });
})
.fail(function(jqxhr, settings, exception) {
  console.log( "Triggered ajaxError handler." );
});

デバッグできるようになりました。ネイティブの JavaScript を使用して onload を使用することもできます。
例が必要な場合は、お知らせください。

例: (このソリューションは IE8+、firefox、chrome で機能します)

function handleOnLoad() {
    // do the same here for the script.2 file
}
function IEhandleOnLoad() {
     if (this.readyState === 'complete' || this.readyState === 'loaded') {
           handleOnLoad();
        }
}
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.onreadystatechange = IEhandleOnLoad;
s.onload = handleOnLoad;
s.src = 'script1.js';
于 2013-03-21T08:21:58.317 に答える
0

あなた<script>は HTML の真ん中にいますか? それらを入れてみてください<head>

<head>
    <script src="script1.js"></script>
    <script src="script2.js"></script>
</head>
于 2013-03-21T08:04:47.963 に答える