Javascript 如何在选项卡关闭或键入新地址时启动弹出窗口?

Javascript 如何在选项卡关闭或键入新地址时启动弹出窗口?,javascript,popup,onbeforeunload,Javascript,Popup,Onbeforeunload,我正在尝试从某些页面启动弹出窗口。我希望用户仅在以下情况下才能看到弹出窗口: a) 它们关闭浏览器选项卡 b) 他们点击浏览器的后退按钮 c) 他们会转到购买路径中下一步以外的页面,基本上,当他们转到任何不包含字符串“/checkout/”的URL时 我看了一些弹出式示例,它们将body加载到onnload上,这有点过于全局化了。如果他们试图离开签出路径,我只想弹出一个真正的弹出窗口 我已经看了几个关于StackOverflow的问题,但是没有一个能完全回答我的问题。这个答案中提到的onBefo

我正在尝试从某些页面启动弹出窗口。我希望用户仅在以下情况下才能看到弹出窗口:

a) 它们关闭浏览器选项卡 b) 他们点击浏览器的后退按钮 c) 他们会转到购买路径中下一步以外的页面,基本上,当他们转到任何不包含字符串“/checkout/”的URL时

我看了一些弹出式示例,它们将body加载到onnload上,这有点过于全局化了。如果他们试图离开签出路径,我只想弹出一个真正的弹出窗口

我已经看了几个关于StackOverflow的问题,但是没有一个能完全回答我的问题。这个答案中提到的onBeforeUnload可能会工作……可能……但我不完全确定如何在上面列出的条件下实现它

…帮忙

下面是我想使用的弹出窗口代码:

<script language="javascript" type="text/javascript">
var win=null;
function NewWindow(mypage,myname,w,h,scroll,pos){
if(pos=="center"){LeftPosition=(screen.availWidth)?(screen.availWidth-w)/2:50;TopPosition=(screen.availHeight)?(screen.availHeight-h)/2:50;}
settings='width='+w+',height='+h+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no';
win=window.open(mypage,myname,settings);
if(win.focus){win.focus();}}
function CloseNewWin(){if(win!=null && win.open)win.close()}
window.onfocus=CloseNewWin;
</script>

var-win=null;
功能新建窗口(mypage、myname、w、h、滚动、pos){
如果(pos==“center”){LeftPosition=(screen.availWidth)?(screen.availWidth-w)/2:50;TopPosition=(screen.availHeight)?(screen.availHeight-h)/2:50;}
设置=“宽度=”+w+”、高度=“+h+”、顶部=“+TopPosition+”、左侧=“+LeftPosition+”、滚动条=“+scroll+”、位置=否、目录=否、状态=否、菜单栏=否、工具栏=否、可调整大小=否”;
win=窗口。打开(mypage、myname、设置);
if(win.focus){win.focus();}}
函数CloseNewWin(){if(win!=null&&win.open)win.close()}
window.onfocus=CloseNewWin;

给你;我在以前的工作中为营销团队写过这篇文章。你应该能够很容易地适应它;只需根据需要更新URL和参数

当用户离开页面时,此代码将打开一个弹出窗口,除非他们通过提交结帐表单离开。(如果页面上有多个表单,您不应该在签出流中使用这些表单,那么您还需要修复这些表单。)


如果您希望能够阻止用户离开页面,我可以帮助您进行更新。

我们对用户的最终选择是:继续结帐过程;去看看我们的另一部免费电影吧;或者不,谢谢,去任何其他地方(但不要得到另一个弹出窗口)。看起来您的示例包含了这一点,所以我需要稍微探讨一下。这段代码会出现在页面的头部还是正文中?如果评论中有HTML,它就不会出现。你可以把这段脚本放到任何地方,它应该可以工作。也就是说,如果您没有运行JS MVC类型的应用程序,脚本应该放在正文的末尾。是否可以修改此代码以动态适应其内容的大小?(通常是一张图片)啊,我忘了告诉你——因为现在,没有必要阻止他们离开网站。我们只是想把他们带回现场。谢谢您的浏览器是否阻止弹出窗口?当我运行时,我得到一个被阻止的弹出窗口。
var nag = function () {

    return {
        // assume the user is going to leave, get ready to pounce!
        doWant: true,

        // FALCON PUNCH
        deploy: function () {
            if (nag.doWant) {

                var width = 449;
                var height = 298;

                args = "width=" + width + ",";
                args += "height=" + height + ",";
                args += "location=0" + ","
                args += "menubar=0" + ","
                args += "resizable=1" + ","
                args += "scrollbars=0" + ","
                args += "status=0" + ","
                args += "titlebar=0" + ","
                args += "toolbar=0" + ","
                args += "hotkeys=0"

                var demo_window = window.open("YOUR_URL", "main", args);

                try {
                    demo_window.focus();
                } catch (err3) { };
            }
        },

        // oh, off to step 2? that's cool. carry on.
        ignore: function () {
            nag.doWant = false;
        }
    }
} ();

window.onunload = nag.deploy;
document.forms[0].onsubmit = nag.ignore;