2

我的问题比使用以下简单的 JavaScript 代码要复杂一些

window.onbeforeunload = function (e) {      
  return 'Are You Sure?';
};

在一个电子商务网页上,我想提醒用户他的购物车中有商品,以便他可以在之前改变主意

  1. 关闭浏览器选项卡/窗口
  2. 导航到另一个域

上面的 JavaScript 方法并不能解决我的问题,因为即使用户在域内导航也会触发它。

短的:

  1. 用户尝试关闭窗口 -> 显示对话框
  2. 用户在浏览器的地址栏中将 www.mydomain.com/shoppingcart url 更改为 www.google.com -> 显示对话框
  3. 用户使用结帐按钮导航到 www.mydomain.com/checkout 或按浏览器中的后退按钮 -> 不显示对话框
4

6 回答 6

3

无法判断用户是按下后退按钮还是关闭选项卡,而您无权访问他们的预期位置。

如果单击内部链接,则可以停止显示对话框:

(function(){

    function isExternal( href ) {
        return RegExp('https?:\\/\\/(?!' + window.location.hostname + ')').test(href);
    }

    var returnValue = 'Are you sure?';

    document.documentElement.onclick = function(e){
        var target = e ? e.target : window.event.srcElement;
        if (target.href && !isExternal(target.href)) {
            returnValue = undefined;
        }
    };

    window.onbeforeunload = function(){
        return returnValue;
    };

})();
于 2009-06-23T10:56:38.593 回答
2

抱歉,您的“问题”没有技术解决方案。

当用户决定离开您的站点时,即输入一个新的 URL,这不是偶然的,因此阻止他们说“嘿,您还没有签出”是没有意义的。

于 2009-06-23T11:56:18.850 回答
2

我建议让访问者自由地离开您的网站,并简单地记住他们的信息(数据库、会话变量等)。就电子商务而言,这是留住客户的礼貌方式。

如果有人想离开您的网站,他们会的。事先仔细检查可能只会激怒客户并减少您退货的机会。

于 2009-06-29T03:09:41.700 回答
0

由于 beforeUnload-event 对象不包含用户试图去的位置,因此一种“hack”方法是向您网站上的所有链接添加点击侦听器,并禁用该处理程序中的卸载侦听器。它不是很漂亮,如果用户使用键盘导航,它可能不会起作用,但这是我目前最好的猜测。

于 2009-06-23T10:50:58.713 回答
0

听起来您需要使用onbeforeunload然后修改所有内部链接以禁用它。后者可能要做的事情是一个 jQuery 事件;通过JS进行实际hrefs运行将是可怕的,尤其是因为它会击败搜索引擎爬行。

于 2009-06-23T10:53:27.540 回答
0

我也在研究这个,原因是我们有一些非常愚蠢的最终用户填写了整个网络表单然后不按保存按钮。

我发现这是你感兴趣的,似乎是一个很好的解决方案: http ://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm

于 2009-08-13T03:38:32.710 回答