在IE中的后续请求之前设置cookie

时间:2011-09-23 06:10:06

标签: javascript internet-explorer cookies

我正试图在浏览器请求页面下方的各种资源之前设置一些cookie(通过javascript)。以下适用于Chrome / Firefox,但不适用于IE:

[some_page.html]

<!doctype html>
<head>
<script>
    var hash=new Date();
    document.cookie='hash=' + hash + ';';
    console.log("From page: " + hash);
</script>
<script src="/test_cookie.php"></script>
</head>
<body></body>
</html>

[test_cookie.php]

console.log('From script: <?=$_COOKIE['hash']?>');

查看some_page.html时,我在控制台中看到以下内容(在Chrome / Firefox中):

"From page: 1316757967982"
"From script: 1316757967982"

是否有任何技巧可以让它在IE中运行?就像在defer脚本标记上设置test_cookie.php一样,或者沿着这些行添加其他内容......?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以动态生成第二个脚本标记并将其注入页面,这样在设置cookie之前就无法启动它。然后,如果您要动态生成脚本标记,在test_cookie.php src URL的末尾添加“?hash = 1316757967982”实际上可能更好,这样可以保证您的服务器获得哈希值(来自URL而不是cookie)。然后,您不必依赖cookie与脚本时间。

以下是动态添加脚本标记的方法:

function addScriptTag(url) {
  var s = document.createElement(’script’);
  s.type=’text/javascript’;
  s.src= url;
  document.getElementsByTagName(’head’)[0].appendChild(s);
} 

addScriptTag("/test_cookie.php?hash=" + new Date());

与浏览器没有合约,它不会同时开始加载多个脚本,只有一个合同,它将按顺序执行静态定义的脚本,所以我不认为你当前的方法是有保证的上班。并行加载多个脚本很容易成为所需的浏览器加速选项。