2014-10-06 90 views
3

幾天來,我一直在努力(沒有成功)在沒有Chrome屏蔽的情況下延遲打開新窗口。延遲對我的任務至關重要,因爲某些動畫必須在打開窗口之前進行,而且我無法承受瀏覽器阻止打開新選項卡。這裏是我的代碼示例:拖延window.open裏面的點擊事件處理程序

element.on("click", function(e){ 
    e.preventDefault(); 
    var self = $(this), 
     url = self[0].href; 

    window.setTimeout(function(){ 
     window.open(url); 
    }, 1000); 
}); 

元素是jQuery對象(錨元素更精確)。我已經注意到,我有更大的成功率,如果我直接通過字符串這樣

window.open("http://example.com"); 

我試過在資源管理器(沒問題),鉻(問題),火狐(沒問題)和Opera這個解決方案(問題)。我放棄了我的想法,因爲我試過了我能記得的一切。同步ajax調用,人爲觸發點擊,創建假錨點元素和人爲觸發點擊事件。沒什麼工作正常。 獎金問題(以防有人知道如何解決問題):有沒有辦法在任何地方隨時調用window.open &?

+0

你能爲我們提供一個小提琴,或代碼,使我們能夠重現問題?一旦動畫完成它的執行,怎麼樣調用'window.open'? – 2014-10-06 11:43:42

+0

我剛剛檢查了這個小提琴的代碼,http://jsfiddle.net/xeoctj2p/1/,我得到的問題是,彈出式窗口攔截器阻止它,可能是你必須通知用戶允許彈出窗口爲您的網站。 – mido 2014-10-06 11:47:54

+0

@ code-jaff:當然我已經試過了。它更糟。每次執行window.open並在每個瀏覽器上都會彈出阻止程序。 mido22:我不想解決那樣的問題。在更糟的情況下,我會使用window.location.href,但即使這樣也有其缺點。它不會立即重新加載窗口,這是最大的問題。 – AlFra 2014-10-06 12:39:32

回答

0

這是在Chrome爲我工作http://jsbin.com/wuqopukayuwi/4/

var $element = $('#link'); 


$element.on('click', function() { 

    var url= $(this).attr('href'); 

    window.setTimeout(function(){ 

    var windowObjRef = window.open(url); 

    console.log(windowObjRef); 

    }, 2000); 

}); 

檢查事項:

  • 顯然,仔細檢查您已爲您的域彈出窗口中瀏覽器(它會提示你第一它試圖彈出一個新窗口

  • 這是因爲Chrome期望能夠以編程方式再次訪問該窗口,所以希望你將該方法的響應聲明爲一個變量。至少,這就是我得到了它的工作...

+0

重要!窗口不會延遲打開窗口。它立即打開它,因爲你忘記了防止默認行爲(開放鏈接)!像我一樣包含e.preventDefault:http://jsbin.com/yugugoyobega/1 – AlFra 2014-10-06 13:56:28

0

只要你知道多久動畫運行,那麼你睡秒
補充睡眠(),msleep()和usleep號()到Node.js,通過C++綁定。

這主要用於調試。

這些調用將通過停止Node.js的事件循環來阻止所有JavaScript的執行!

使用

`var sleep = require('sleep'); 
sleep.sleep(n): sleep for n seconds 
sleep.msleep(n): sleep for n miliseconds 
sleep.usleep(n): sleep for n microseconds (1 second is 1000000 
microseconds)`