バックグラウンド
私は使用しているCMS用のレスポンシブ画像プラグインに取り組んでおり、ユーザーの画面のサイズをサーバーに通知するために、即時のset-cookieメソッドを使用することを選択しました。
これに慣れていない場合は、ドキュメントの上部にあるjavascriptでCookieを設定することを意味します。したがって、ブラウザがドキュメントの残りの部分を解析し続けると、画像のリクエストとともにCookieが送信されます。
これは、IE9を除くほとんどのブラウザーで機能します。これについての一般的な説明は、IE9がドキュメントの解析を完了するまで実際にはCookieを設定しないというもののようですが、これは本当に奇妙な動作のようです。私は独自のテストを行い、Cookieは単なる特別な例外ではなく、実際にはIE9がjavascriptを処理する方法であるという結論に達しました。IE9はドキュメントの解析が完了するまでjavascriptを実行しないようです。
残念ながら、インラインJSの実行に取り掛かる前に、外部リソースに対するすべての要求を送信します。
質問
ドキュメントがまだ解析されている間に、IE9(およびこの動作を示す他のブラウザー)にjavascriptを実行させる方法はありますか?
編集
だから私は進歩を始めています、それはバックグラウンドコンパイルを行うIE9javascriptエンジンと関係があるかもしれません。私はそれがそれをコンパイルする前にそれがすべてのjavascriptを取得するまで待つと想像します。特定のブロックの動作を切り替えることができる、あまり知られていないIEのscript-tag属性があるのではないかと思います。狩りに行くので、何か見つけたらお知らせします。
編集2
IE9がjavascriptで動作する方法についての私の仮定については完全に正しいわけではないようです。これは、科学界が「間違ってさえいない」と表現する不幸な状況の1つです。このように、私が尋ねた方法での質問は、いくつかの誤った仮定に依存しているため、もはや役に立ちません。ただし、テストに使用した変更済みコードを以下に投稿します。
test.php
<?php
file_put_contents("log.txt", "\r\n\r\nTestResStart\r\n", FILE_APPEND);
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<img src="image.php?q=1" />
<script type="text/javascript">
document.write('<img src="image.php?q=4-js" />');
alert("HALT!");
document.write('<img src="image.php?q=5-js" />');
</script>
<img src="image.php?q=2" />
<img src="image.php?q=3" />
</body>
</html>
image.php
<?php
session_start();
file_put_contents("log.txt", "image".$_GET['q']."\r\n", FILE_APPEND);
$rImg = ImageCreate(300,50);
$cor = imagecolorallocate($rImg, 225, 225, 225);
$cor = imagecolorallocate($rImg, 0, 0, 0);
imagestring($rImg,2,0,0,$_GET['q'],$cor);
header('Content-type: image/jpeg');
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
imagejpeg($rImg,NULL,100);
test.phpを実行すると、htmlおよびdocument.writeを介して画像が読み込まれます。image.phpは、これらのリクエストを受信した順序でログに記録します。アラートが表示されている場合でも、リクエストは引き続き処理されることに気付くでしょう。そのため、アラートは実行を停止しません(ただし、他のほとんどのブラウザーは同様の動作を示します)。スクエア1に戻る!