【问题标题】:onunload and onbeforeunload not triggered when location changes位置更改时不会触发 onunload 和 onbeforeunload
【发布时间】:2015-11-07 16:40:34
【问题描述】:

如何检测在<head> 标签之间进行的 window.location 修改?

当我在 chrome 控制台中执行以下操作时,我会按预期获得我的 console.log。

window.onbeforeunload = function(){
   console.log("Before Unload");
};
window.location.replace("http://www.google.com");

但是如果我把这个 sn-p 放在一个 js 文件中,该文件放在我页面的 <head> 中,那么我的 console.log 将不会出现,并且似乎 onbeforeunload 和 @ 987654325@ 永远不会被触发。我确信代码的 sn-p 可以正确执行,因为我可以使用调试器语句遍历每一行。

如何在我的正文加载之前检测页面的<head> 是否有位置变化?我无法覆盖 window.location.replace,因为它是不可伪造的。

这是一个重现我的问题的简单代码示例

<head>
    <script type="text/javascript">
    var function1 = function() {
        window.onunload = function() {
            console.log("onunload");
        }
    }
    var function2 = function() {
        window.location.replace("http://www.google.com");
    }
    function1();
    function2();
    </script>
</head>

<body>
    This is my test
</body>

我的限制是我只能改变function1的内容。

编辑: 实际用例如下: 我在网站的标题中有一个脚本。我可以在这个脚本中写任何我想要的东西,但我无法控制网站的其余部分。 在某些情况下,我的后面有一个脚本会进行重定向。在这种情况下,我需要设置一个 cookie。

【问题讨论】:

  • 它的工作..我已经从 setTimeout 调用了函数 2 并使用 firefox 进行测试,并在控制台中签入保留选项启用。发现它工作正常。
  • 我对function2没有影响。我只能更改功能 1。我将在说明中添加。关键是,如果您的身体未加载,似乎事件不会触发。只是想知道如何在没有这些事件的情况下做到这一点。
  • 你能解释一下你的要求吗?
  • 我只能控制 function1()。
  • 不清楚您的要求,但请尝试 addEventListener,因为如果稍后定义了另一个处理程序,则可能会覆盖您使用的直接事件处理程序。 Javascript 是及时编译记住的。

标签: javascript url-redirection onbeforeunload window.location onunload


【解决方案1】:

在这种情况下将触发'pagehide'事件而不是'beforeunload'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多