目前情況下我們使用window.open自動彈出窗口都會給浏覽器攔截掉了,但我們會發現有些網站還是可以彈出窗口了,這種是如何實現的呢?下面一起來看一下基於jquery的做法。
在很多網站中,會有彈出窗口,通常采用window.open的方式,但是這個方式一般被浏覽器給禁止了。
說明這也是好事。現在的浏覽器:360 獵豹 搜狗 等等都標明自己的安全性、智能性、屏蔽各種廣告,給了用戶很好的體驗,但是可苦了我們這些站長們啊。
有廣告還不顯示出來,如何過活啊?
言歸正傳。
如何用jquery強制彈出新窗口?
今天分享一個辦法。
直接上代碼:
代碼如下
//打開新鏈接方法實現
function windowOpen(){
var a = document.createElement("a");
a.setAttribute("href", url);
if(target == null){
target = '';
}
a.setAttribute("target", target);
document.body.appendChild(a);
if(a.click){
a.click();
}else{
try{
var evt = document.createEvent('Event');
a.initEvent('click', true, true);
a.dispatchEvent(evt);
}catch(e){
window.open(url);
}
}
document.body.removeChild(a);
}
//新窗口打開
windowOpen('http://www.45it.net/', '_blank');
//當前窗口打開
windowOpen('http://www.45it.net/', '_self');
思路
其實做法很簡單,首先模擬A標簽點擊打開新窗口,若失敗再直接調用window.open方法。
問題
目前無法在異步的情況下調用該方法。如下:
代碼如下
//以下做法將得不到期望的結果,會被浏覽器阻止$.get("http://www.a.com/ajax",function(){
windowOpen('http://www.45it.net/', '_blank');
});
無法調用的原因是:浏覽器中的javascript是單線程的。雖然$.get是ajax的一個方式,是異步的。但是這個異步只是一個模式,不是真正的浏覽器異步線程。