首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手动键入url以移动到下一页时,Chrome加载脚本两次

手动键入url以移动到下一页时,Chrome加载脚本两次
EN

Stack Overflow用户
提问于 2015-07-04 01:08:05
回答 2查看 1.2K关注 0票数 0

我有一个奇怪的问题,我认为可能是Chrome错误,也可能是Visual的bug。我的剧本被加载了两次。为了验证这个问题,我创建了一个测试脚本,它设置一个带有时间戳的cookie,以显示代码被追加了两次。如果我通过超链接导航到页面,它可以正常工作。另外,如果我点击来回按钮,它也可以正常工作-- ,但是如果我在浏览器中手动键入第二个页面的url,它会调用该脚本两次

只在Chrome中发生,并且只有在使用Asp.Net Web应用程序时才会发生。--如果我使用Asp.Net网站,则不会发生这种情况。这些是新的空web应用程序,没有额外的文件或设置改变。

我的示例html页面如下所示:

代码语言:javascript
复制
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Page 1</title>
    <script src="chromebug.js"></script>
</head>
<body>
    <h1>Page 1</h1>
    <a href="page1.html">Page 1</a>
    <a href="page2.html">Page 2</a>
    <a href="page3.html">Page 3</a>
</body>
</html>

和chromebug.js看起来如下:

代码语言:javascript
复制
function getCookieTest(name) {
    var cookie, cookies = document.cookie.split(';');
    name = name + '=';
    while ((cookie = cookies.pop())) {
        cookie = cookie.replace(/^\s+/, '');
        if (cookie.indexOf(name) === 0) {
            return cookie.substring(name.length, cookie.length);
        }
    }

    return null;
}

function setCookieTest(name, value, secs) {
    var c;
    if (secs > 0) {
        c = new Date();
        c.setSeconds(c.getSeconds() + secs);
        c = name + '=' + value + '; expires=' + c.toGMTString() + '; path=/';
    } else {
        c = name + '=' + value + '; path=/';
    }
    document.cookie = c;
    return
}

console.log('chromebug loaded');
var getdata = getCookieTest('loaded') || '';
setCookieTest('loaded', getdata.toString() + document.title + ':' + new Date().getTime().toString() + '|', 10000);
getdata = getCookieTest('loaded');
console.log(getdata); // show what has been saved in the cookie

,我是不是遗漏了什么?有办法解决这个问题吗?

我甚至制作了一个视频来演示这个问题:http://screencast.com/t/MpXfbDMBvfY

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-04 16:14:12

非常感谢stdob向我指出Live头扩展。如果你有类似的问题,我会建议你的。https://chrome.google.com/webstore/detail/live-http-headers/iaiioopjkcekapmldfgbebdclcnpgnlo?hl=en

在我的例子中的问题是谷歌Chrome预取优化。当你输入地址栏时,谷歌会预料到你将要加载的页面,并开始拉下脚本。如果您的脚本在加载时预先形成了一些加载或cookie操作,那么这是有问题的。当您取消选中此选项时,您将看到重复加载消失。

然而,这是一个简单的方式来控制这一点,而不改变你的设置。这一点特别重要,因为您无法控制最终用户的设置。

代码语言:javascript
复制
if (document.webkitVisibilityState && document.webkitVisibilityState == 'prerender') {
// avoid performing load logic
}
票数 2
EN

Stack Overflow用户

发布于 2015-07-04 16:15:07

看起来,当用户在地址栏中手动输入url时,Chrome有着不明显的行为。您可以使用一些工具,如报头来捕捉这种行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31215875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档