window.open不被攔截


經常有人用window.open()的時候被瀏覽器攔截了  比如

btn.onclick=function(){

     function aa (){

       window.open("xxx");

    }

    aa();

}

其實,如果你的window.open寫在用戶事件處理函數的當前作用域下,是不會的,只要用戶點擊頁面就觸發 window.open 事件,這樣一般不會攔截,瀏覽器會認為這是用戶的默認行為。

btn.onclick=function(){  

       window.open("xxx");

}

其實這樣的代碼是可行的不會有問題

也可以代碼可編寫如下:

 
        
var $E = YAHOO.util.Event; 
var adPopup;
var popAd = function(sURL,sName,sFeatures,bReplace) {
if (adPopup)
return;
if(sName == undefined) {
sName = '_blank';
};
if(sFeatures == undefined) {
sFeatures = '';
};
if(bReplace == undefined) {
bReplace = false;
};
adPopup = window.open(sURL,sTarget,sFeatures,bReplace);
adPopup.blur();
adPopup.opener.focus();
$E.removeListener(document.body, 'click', arguments.callee); }
try { popAd(); } catch (e) { $E.on(document.body, 'click', popAd); }


當然如果用戶瀏覽器安裝了攔截插件,那很有可能不會彈出(比如 Firefox 的 noscript 插件,就不允許任何彈出窗)。方法不是絕對的,也不是最好的,只是用最少的時間來做最效率的事情。

PS:可以通過模擬 form 提交的方式來彈出窗口,穿越性(相對於一般攔截彈窗的插件)很好,不過無法設置 sFeatures 參數內容

       

  function openUrl( url ){
var f=document.createElement("form");
f.setAttribute("action" , url );
f.setAttribute("method" , 'get' );
f.setAttribute("target" , '_black' );
document.body.appendChild(f)
f.submit();
}

openUrl("http://www.qq.com")




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM