Javascript $(窗口);从jquery迁移到zepto时无法按预期工作

Javascript $(窗口);从jquery迁移到zepto时无法按预期工作,javascript,jquery,zepto,Javascript,Jquery,Zepto,以前,我有一个JavaScript代码,当用户关闭浏览器时,它会弹出一个对话框并执行重定向 <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script> $(document).ready(function() { var url = 'ht

以前,我有一个JavaScript代码,当用户关闭浏览器时,它会弹出一个对话框并执行重定向

<html>
<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

<script>
    $(document).ready(function() {
        var url     = 'http://www.yahoo.com';
        var message = 'go to yahoo?';

        $('a').on('click', function() { $(window).unbind("beforeunload"); });
        $('form').on('submit', function() { $(window).unbind("beforeunload"); });

        $(window).on("beforeunload", function() {
            $(window).unbind("beforeunload");
            setTimeout(function() {
                window.location = url;
            }, 0);

            return message;
        });
    });
</script>
</head>
<body>
hello world
</body>
</html>

$(文档).ready(函数(){
var url='1〕http://www.yahoo.com';
var message='转到雅虎?';
$('a').on('click',function(){$(window).unbind(“beforeuload”);});
$('form').on('submit',function(){$(window).unbind(“beforeuload”);});
$(window).on(“beforeunload”,function()){
$(窗口)。解除绑定(“卸载前”);
setTimeout(函数(){
window.location=url;
}, 0);
返回消息;
});
});
你好,世界
我在chrome上进行了测试,结果与预期的一样

现在,出于某种原因,我计划使用zepto.js而不是jquery.js

通过改变

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>


我意识到代码不再工作了。没有JavaScript错误。但是,
beforeunload
的事件函数从未触发

我怀疑
$(窗口)。在jqueryzepto


我可以知道,我如何获得
$(窗口)。在(“beforeunload”,function(){
适用于zepto

我现在没有时间深入分析zepto和jquery代码

问题在于zepto处理事件回调返回值的方式

说它必须这样使用:

e.returnValue = confirmationMessage;     // Gecko and Trident   
return confirmationMessage;              // Gecko and WebKit
这是由jQuery自动完成的,但不是由Zepto完成的

手动设置
returnValue
在Chromium和Firefox中似乎效果不错:

$(window).on("beforeunload", function(e) {
    e.returnValue = message;
    return message;
});

但是仍然可能存在跨浏览器问题。因此,要么您使用本机
addEventListener
而不是zepto,要么您需要进行一些跨浏览器测试。

您的代码中仍然有
jQuery
,因此我预计控制台中没有定义
jQuery
,但您没有看到它,因为e重定向发生。谢谢。我在Edge浏览器和Chrome浏览器中进行了测试。您建议的解决方案对我来说很好。@CheokYanCheng我正要建议打开一个问题,但我可以看到您已经这样做了;)
$(window).on("beforeunload", function(e) {
    e.returnValue = message;
    return message;
});