【问题标题】:setTimeout to window.open and close, on the same window?setTimeout 到 window.open 和 close,在同一个窗口上?
【发布时间】:2015-05-10 04:48:01
【问题描述】:

我在一段时间后打开窗户,然后在一段时间后自动关闭它们有点困难。我不知道为什么,但似乎当我尝试在 window.open 和 window.close 上使用 setTimeout 时,它们会以某种方式干扰。这是我的代码atm:

function topLeft() {

var myWindow = "image.png", "ONE", "width=300,height=310,top=100,left=100,menubar=no,toolbar=no,titlebar=no,statusbar=no";

setTimeout(function() {
myWindow.window.open() }, 5000);

setTimeout(function() { 
myWindow.close() }, 10000);


function start() {
openClose();
}


window.onload = start;

感谢观看

【问题讨论】:

    标签: javascript jquery settimeout window.open


    【解决方案1】:

    您的代码不正确。

    myWindow 是一个字符串变量。

    您正在尝试拨打myWindow.window.open()。这会产生脚本错误,因为myWindow(字符串变量)没有window 属性。

    也许你的意思是这样的:

    var myWindowURL = "image.png", myWindowName = "ONE";
    var myWindowProperties  = "width=300,height=310,top=100,left=100,menubar=no,toolbar=no,titlebar=no,statusbar=no";
    var openWindow;
    
    setTimeout(function() {
        openWindow = window.open(myWindowURL, myWindowName, myWindowProperties); 
    }, 5000);
    
    setTimeout(function() { 
        openWindow.close() 
    }, 10000);
    

    大多数流行浏览器中的弹出窗口阻止程序仅允许打开一个新窗口,前提是它是由直接用户操作(如点击)运行的代码导致的。

    因为setTimeout() 会在未来某个时间发生,所以不会被视为用户操作的直接结果,因此从setTimeout() 打开窗口的尝试可能会被弹出窗口阻止程序阻止。

    当然,您可以在自己的浏览器中禁用弹出窗口阻止程序,但这只是您可以在自己的浏览器中执行的操作。您不能通过 Javascript 禁用弹出窗口阻止(因为这会破坏目的)。

    【讨论】:

    • 道歉我应该提到,我要求用户关闭他们的弹出窗口阻止程序(我知道这是不受欢迎的,但这是一个实验)。我已经禁用了我的拦截器,但代码仍然没有运行?
    • @NickR93 - 看看我在答案开头添加了什么。您的代码完全错误。
    • 有趣的是,在 chrome 上,1000 的超时确实会打开窗口(没有阻止弹出窗口),但 2500 不会......所以它有一个计时的东西。
    • @Miguel 大多数浏览器只允许您捕获最多一秒钟的点击和其他事件。 Edge 根本不允许你使用 setTimeout 打开一个窗口(没有弹出一个被阻止的警报)。
    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多