(注意:我相信我问的是与this unanswered question相同的问题,这个问题与我的问题不太一致,部分原因是因为它没有包含MWE。关于{{3}的讨论}和this meta page,我相信可以发布一个尚未回答的现有问题的更好版本。)
以下HTML包含一个MWE版本的脚本,该版本在Firefox中运行多年,但在Firefox 57.0中突然失败。 MWE只显示一个整数,每次加载文件时都会递增。该脚本在Safari中工作,如果我在Safari启动时将此文件设置为加载,则每次都显示不同的整数。如果我在同一会话中使用文件/打开从菜单重复加载文件,它在FF中工作。但是在FF 57中,如果我在浏览器启动时加载文件,它总是显示0。检查document.cookie
和其他console.log()
语句表明发生这种情况是因为FF 57在会话之间丢失了cookie。为什么呢?
这是FF 57中的错误吗?我的代码是否有一些巧妙的错误导致它在FF 57中失败?也许是因为FF 57在某些方面对Javascript更严格? (我已经检查过是否有关于此的报告,但是找不到任何内容,并检查了首选项或about:config
中可能控制的任何配置设置这种行为,但我找不到任何东西。)
<html>
<head>
<script type="text/javascript">
<!--
function incrementCookie() {
lastfooStr = getCookie("foo");
if (lastfooStr == null || lastfooStr == NaN) { // if first time, start the indexes at 0
nextfoo = 0;
} else {
nextfoo = 1 + parseInt(lastfooStr); //increment it
}
setCookie("foo", nextfoo, 365);
document.write("<head><body>" + nextfoo + "</body></head>");
}
function setCookie(cookie_name, value, expire_days) {
var expire_date=new Date(); // get now
expire_date.setDate(expire_date.getDate() + expire_days); // expiration date
var cookie = cookie_name + "=" + value +
"; expires=" + expire_date.toUTCString() +
"; path=/";
document.cookie = cookie;
}
function getCookie(cookie_name) {
var doc_cookie = " " + document.cookie;
var cookie_value = null;
var cookie_start = doc_cookie.indexOf(" " + cookie_name + "=");
if (cookie_start != -1) { // found it; now get the value.
var cookie_val_start = doc_cookie.indexOf("=", cookie_start) + 1;
var cookie_val_end = doc_cookie.indexOf(";", cookie_val_start);
if (cookie_val_end == -1) { // must be the last cookie
cookie_val_end = doc_cookie.length;
}
cookie_value = doc_cookie.substring(cookie_val_start, cookie_val_end);
}
return cookie_value;
}
window.onload=incrementCookie();
//-->
</script>
</head>
</html>
完全披露:在FF 57中,当我运行此脚本时,我在控制台中收到以下(不相关,我相信)消息:
An unbalanced tree was written using document.write() causing data from the network to be reparsed. For more information https://developer.mozilla.org/en/Optimizing_Your_Pages_for_Speculative_Parsing
cookietest.html:48
第48行是文件的倒数第二行;它是包含</script>
标记的那个。
和
The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must be declared in the document or in the transfer protocol.
在Safari中,我只在运行时收到此消息:
Not allowed to load local resource: file:///favicon.ico