1

最近変更したWebページがあり、IE7を除くすべてのブラウザーで正常に機能します。IE7では、次のように表示されます。

SCRIPT1014:無効な文字blah.html、1行目の文字1

スクリーンショット:

ここに画像の説明を入力してください

コードを数回確認しましたが、何も目立ちません。javascriptエラーは知っていますが、どこにあるのか特定できません。

イライラする部分は、どこを見ればよいかわからず(1行目1文字目)、エラーがあいまいです。

4

1 に答える 1

3

一言で言えばエラー

問題は、への呼び出しの文字列内のjavascriptエラーでしたwindow.setTimeout

より詳しく

の文字列window.setTimeout([string], [int])はevalとして実行されるため、実行中にjavascriptエラーが発生しました。これは、私にとってはウィンドウのonloadイベント中に発生しました。

エラーに「無効な文字」と表示されたのはなぜですか?

jqueryコマンドを開始するためにaの#代わりに使用したためです。$javascriptコンパイラは何をすべきかわからなかった#ので、エラーをスローしました。

エラーレポートが1行目の文字1にあるのはなぜですか?

の文字列はwindow.setTimeoutevalとして実行されるため、エラーは1行目の文字1で報告されました。これは最終的に意味があります。

問題を再現するためのサンプルHTML

この問題を示すために私が作成したサンプルページは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test Page</title>
    <script src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
</head>
<body>
    <h1>Test Page</h1>
    <script type="text/javascript">
        $(document).ready(function(){
            window.setTimeout("#('#sdfl');", 1000);
        });
    </script>
</body>
</html>

解像度

eval文字列でjqueryコマンドの#代わりに誤って使用しました。これは実際にはレガシーコードであるため、文字列( evil$でevalを呼び出すのではなく、特定の関数を呼び出すようにリファクタリングしたため、次のようになりました。

window.setTimeout(function(){
      $('#sdfl');
   }, 1000);

この変更により、評価文字列ではなくページに関連する特定の行と文字番号が指定されるため、元のエラーを見つけるのがはるかに簡単になることに注意してください。

于 2013-01-24T00:09:06.337 に答える