1

Opera (Windows 7 で動作するバージョン 12.01) のバグを特定したと思いますが、考えられる回避策について支援を求めています (他の人がこれがバグであることを確認できると仮定して)。

以下を含む 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</title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" />
  </head>
  <body onload="window.alert(0);">
  </body>
</html>

「onload」イベントは決して発生しません。奇妙なことに、自分で閉じるのではなく script タグを閉じて、次のように変更すると:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" />

に:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

(残念ながら私にはできません)、イベント発生し、アラートが表示されます。

他の誰かがこの問題に遭遇しましたか? <script />もしそうなら、スクリプトタグを からに変更する以外に、それを回避する方法を見つけました<script></script>か?

注: はい、Opera のバグ レポートを開きました。彼らからの返事はまだありません。

4

2 に答える 2

3

この「バグ」は、Opera だけでなく、すべてのブラウザーに存在します (私は Chrome、FF、および IE をテストしました)。

自己終了スクリプト タグは機能しません。SO に関するこの質問を参照してください:自己終了スクリプト タグが機能しないのはなぜですか?

編集:

script タグを で閉じることができない理由はわかりませんが、考え</script>られる回避策の 1 つは、スクリプトを JavaScript でロードすることです。

var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js";
newScript.onload = function(){
    // jQuery code...
};
document.getElementsByTagName("head")[0].appendChild(newScript);

(OK、確かに、これは実際にどこかで使用することを強制します</script>が、少なくとも<script></script>now の間の部分は空ではありません... :P)

于 2012-08-16T21:30:23.113 に答える
2

Opera の動作は HTML5 に準拠しています。onload が実行されない理由を理解するには、SRC が設定された SCRIPT タグの内容を無視する必要があることを覚えておく必要があります。/> は最初の SCRIPT タグを閉じる正しい方法ではないため、後続の end-of-head タグと start-of-body タグは SCRIPT タグ内で終了します。これは、次のように書くと少し似ています。

<script src="foo.js">
</head><body><p>This doesn't appear anywhere, does it?</p></body>
</script>

したがって、SCRIPT タグ内の BODY は無視されるため、最初から onload が設定されることはありません。

于 2012-08-17T11:48:19.203 に答える