2014-03-25 250 views
3

後不工作我有兩個setTimeout接連。一個在窗口中打開網頁,另一個在預定時間後關閉窗口。但是,使用setTimeout打開網頁後,關閉窗口的下一個setTimeout不起作用。 setTimeout與windows.close本身工作正常。Javascript:使用setTimeout與window.close()使用setTimeout與window.open()

我試圖用消息打開一個窗口;然後在預定時間後在窗口中打開一個網站,然後在幾秒鐘後關閉窗口。這裏是我的功能來做到這一點:

function showNews() { 
    news = window.open("", "NewsWindow", "width=900, height=700"); 
    news.document.write("<p>The 'NewsWindow' will only appearing for 3 seconds.</p>"); 
    tmot = setTimeout(function(){news.window.open('http://www.yahoo.com','_self')}, 2000); 
    tmot = setTimeout(function(){news.window.close()}, 5000); 
} 

我試着在Chrome和IE和兩個瀏覽器中運行,只會執行的setTimeout的一個,而不是其他。任何意見和幫助將不勝感激!

+0

我在Firefox(27)嘗試這樣做, IE瀏覽器(11),它工作正常。 – Guffa

回答

0

我在Chrome上的JSFiddle中測試了這個。

超時實際上是觸發。 問題是,某些瀏覽器不允許您使用javascript關閉窗口。有一些錯誤會阻止它 - 特別是瀏覽器不會讓來自一個網站的代碼關閉向另一個網站打開的窗口。請參閱下面的評論以獲得更好的解釋。

當我在Chrome中試過這個setTimeout方法,但窗口沒有關閉。我通過調用'alert'方法而不是news.window.close()方法來測試它。

+1

我不認爲這是一個錯誤。一旦窗口加載了來自不同域的內容,瀏覽器可能會認爲它是禁用的。 – Pointy

+1

你是對的 - 我不應該說'錯誤'。有時候我會使用'but'這個詞,當我真正的意思是「代碼沒有做我想做的事情,而是它設計要做的事情」。我在編輯答案。 – user3446496

2

你會使用父窗口使用相同的參數更好地重新打開:

function showNews() { 
    news = window.open("", "NewsWindow", "width=900, height=700"); 
    news.document.write("<p>The 'NewsWindow' will only appearing for 3 seconds.</p>"); 
    tmot = setTimeout(function(){window.open('http://www.yahoo.com', "NewsWindow")},2000); 
    tmot = setTimeout(function(){news.close()}, 5000); 
} 

不嘗試在IE瀏覽器,我沒有它。

+0

我在這裏試過這個鉻: http://jsfiddle.net/u6EaX/ 它沒有工作。 窗口打開新網站後,原始窗口無法再對其進行控制,至少在Chrome上是如此。 – user3446496

+0

'window.open',而不是'news.window.open'。看到這裏http://jsfiddle.net/u6EaX/1/ –

+0

謝謝!這就是訣竅! (從setTimeout行刪除「新聞」。)現在要弄清楚爲什麼是這種情況... – user3461873

0

一些瀏覽器禁止您在加載網站後關閉窗口。

以下工作:

HTML:

<button onclick="showNews()">Show News</button> 

的JavaScript:

<script> 
var myWindow; 

function showNews() 
{ 
    myWindow = window.open("","myWindow","width=200,height=100"); 
    myWindow.document.write("<p>This is 'myWindow'</p>"); 
    //tmot = setTimeout(function(){myWindow.open('http://www.yahoo.com','_self')}, 2000); 
    tmot = setTimeout(function(){myWindow.close();}, 5000); 
} 

</script> 

DEMO:

View demo

但是,如果我們取消註釋,我們加載yahoo.com線,它不工作了:

View demo


怎麼辦?

你可以嘗試使用一個黑客,像這樣:

HTML:

<button type="button" id="show-news">Show News</button> 

的jQuery:

$("#show-news").click(function() { 

    myWindow = window.open('','myWindow', "width=200, height=200"); 
    setTimeout(function() { 
     myWindow.window.open("http://www.w3schools.com/", "_self"); 
    }, 2000); 

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

});