我正试图在浏览器请求页面下方的各种资源之前设置一些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
一样,或者沿着这些行添加其他内容......?
谢谢!
答案 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());
与浏览器没有合约,它不会同时开始加载多个脚本,只有一个合同,它将按顺序执行静态定义的脚本,所以我不认为你当前的方法是有保证的上班。并行加载多个脚本很容易成为所需的浏览器加速选项。