javascript - 强制 Internet Explorer 9 在解析页面时执行 javascript?

标签 javascript internet-explorer-9 responsive-design

背景

我正在为我使用的 CMS 开发一个响应式图像插件,我选择使用即时 set-cookie 方法来告诉服务器用户屏幕的尺寸。

对于那些不熟悉这个的人,这意味着你在文档顶部的 javascript 中设置了一个 cookie,所以当浏览器继续解析文档的其余部分时,它会发送你的 cookie 以及它发送的任何图像请求.

这适用于大多数浏览器,IE9 除外。对此的流行解释似乎是 IE9 在完成解析文档之前实际上并没有设置 cookie,这看起来确实很奇怪。我已经完成了自己的测试并得出结论,cookie 不仅仅是一些特殊的异常,它实际上是 IE9 处理 javascript 的方式 - IE9 在完成文档解析之前似乎不会执行任何 javascript。

不幸的是,它在开始执行内联 JS 之前发送了所有对外部资源的请求。

问题

有没有办法在文档仍在解析时强制 IE9(和其他表现出这种行为的浏览器)执行 javascript?

编辑

所以我开始取得进展,这可能与 IE9 javascript 引擎有关 - 它进行后台编译。我想它会等到它在编译它之前获得所有的 javascript。我想知道 IE 是否有一个鲜为人知的脚本标签属性可以切换特定 block 的行为。要去打猎了,有什么发现就告诉大家。

编辑 2

看来我对 IE9 使用 javascript 的方式的假设并不完全正确。这是科学界形容为“甚至没有错”的不幸情况之一!因此,我提出的问题不再有用,因为它依赖于一些错误的假设。但是,我将在下面发布用于测试的修改后的代码:

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 将按照收到的顺序记录这些请求。您会注意到,即使显示警报,请求也会继续通过 - 因此警报不会停止执行(尽管大多数其他浏览器表现出类似的行为)。回到方 block 1!

最佳答案

使用 document.write() 将脚本标记写入文档可能会解决您的问题。

这可能看起来很奇怪,但我注意到这样做会导致 DOM 在每个脚本之后实际呈现到屏幕上(否则情况并非如此,如果您在加载期间尝试为进度条设置动画会非常烦人)

如果它们有相同的原因,它也可以解决您的 cookie 问题。

关于javascript - 强制 Internet Explorer 9 在解析页面时执行 javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409313/

相关文章:

php - 不使用 HTML 表单元素将图像文件上传到服务器

javascript - 将项目添加到 Angular 列表中

HTML:IE9 标准模式在每个页面上打印 TFOOT

javascript - 在javascript中响应

css - 网站响应迅速,但未通过谷歌响应测试

javascript - 找不到模块 : Can't resolve 'material-ui/styles/colors'

javascript - 条件的基本 JS 运算符

javascript - IE9 错误 80020102,使用带有 doctype strict 的 vbscript Preserve 关键字

asp.net - 有没有办法在 IE9 中使用有序列表和更新面板来解决这个问题?

html - 我可以让 <img> `srcset`/`sizes` 属性考虑到我对 `object-fit: cover` 的使用吗?