2

不可解な問題があります: この一見単純なページは IE9 では動作しません:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <!-- jq.js is the non-minified jQuery library -->
    <script type="text/javascript" src="jq.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/ui/1.9.0/jquery-ui.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('body').append('<h1>ok</h1>');
        });
    </script>
</head>

<body>
</body>
</html>

私が得た動作は、ページに「OK」と表示されることもあれば、何も表示されないこともあります。コンピューターの速度に依存することがわかりました。高速なコンピューターを使用している場合、通常は機能しますが、低速のコンピューターでは、3 回中 2 回ほど失敗します。

デバッグ コンソールを見ると、jQuery にアクセスしようとするとアクセス許可が拒否されるという症状がありますnavigator.userAgent

quirksブラウザーは、モードからモードに切り替えていることを (ログに) 書き込みIE9ます。私の仮説は、ブラウザーがモードに切り替わる前に jQuery がロードされているため、jQuery がIE9モードに引っ掛かり、quirksそこからブラウザーの属性にアクセスできなくなるというものです。

IE9をすぐにモードに切り替えるためにメタタグ<!doctype html>を挿入して挿入しようとしましたが、問題は解決しませんでした。X-UA-CompatibleIE9

jQuery を省略して、この単純なスニペットで問題を再現することができました。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
</head>

<body>
    <script type="text/javascript">
        document.write('<h1>testing</h1>');
        try {
            document.write('<h1>' + navigator.userAgent + '</h1>');
            document.write('<h1>ok</h1>');
        } catch(e) {
            document.write('<h1>not ok</h1>');
        }
    </script>
</body>
</html>

( http://test.m.e17.dk/ie9-navigator/で入手できます。)

次の方法で再現します。

  1. ページを開きます。
  2. F5 を押します。
  3. カーソルをアドレスバーに置きます。
  4. 入力を押します。

ステップ 2 ~ 4 を必要なだけ繰り返します。DOM が読み込まれるのを待たなかったことが原因で問題が発生した可能性があります ( http://bugs.jquery.com/ticket/12282で説明されているように)。

4

3 に答える 3

2

1.9 についてはわかりませんが、IE9 の 1.8 でも同様のリグレッションがありました (1.7 でのリグレッション)。バグの詳細は次のとおりです。

http://bugs.jquery.com/ticket/12282

基本的に、IE9 で document.ready が起動されたときに DOM の準備ができていない可能性があります。これは、ページ全体が読み込まれる前に JavaScript スクリプトが開始される可能性があるためです。

どうやら、これがバグであるかどうかについて実際に議論があるようです。

とにかく、1.8.2 に更新すると問題が解決しました。1.9 ブランチでも同じバグが修正されていることを願っています。

別の解決策は、html から必要なものすべての後に、document.ready 部分をページの最後にできるだけ遠くに移動することです (もちろん、単純化された例では、 を使用しているため機能しません<body>が、できれば必要のない実際のコード)。

また、1.9 で修正されていない場合は、1.8 の修正が実装されている場所を以下に示します。

https://github.com/jquery/jquery/commit/0f553ed0ca0c50c5f66377e9f2c6314f822e8f25

ご覧のとおり、これは 1 行のコードなので、安定版がリリースされるまで 1.9 バージョンの独自の修正済みバージョンを維持するか、独自の jquery スクリプトにこれと同じセーフガードを実装することができます。

于 2012-11-14T12:54:49.183 に答える
2

このエラーの原因を突き止めました。Active Directory のグループ ポリシー設定が IE9 の誤動作の原因でした。正確な名前を取得して、同じ問題に遭遇した人のためにここに追加しようとします.

助けてくれたみんなに感謝します。

問題のポリシーは、下の添付図にあります。

ここに画像の説明を入力

于 2012-11-18T15:16:58.373 に答える
1

単なる提案ですが、同じコンテンツ配信ネットワークから両方のスクリプトをダウンロードしようとしましたか?そして、順序が正しいことを確認してください(あなたの順序は正しいようです)が、どちらかのオリジンからの遅延が原因である可能性もあります。補足:スクリプトタグをヘッダーではなくドキュメントの下部に配置するようにしてください。これはパフォーマンスの問題が原因です。

于 2012-11-14T12:49:25.340 に答える