window.open是javascript函數(shù),該函數(shù)的作用是打開一個新窗口或這改變原來的窗口,如果你直接在js中調(diào)用window.open()函數(shù)去打開一個新窗口居兆,瀏覽器會攔截你,那么如何避免呢礼旅。
注意甘晤,只有直接使用js調(diào)用 window.open(url); 打開新窗口時乳绕,才會被攔截享潜,如果是改變原理額窗口:window.open(url,'_self'); 則不會被攔截。
那么 js調(diào)用 window.open(url); 打開新窗口柒巫,如何才能不會瀏覽器攔截呢励堡?
瀏覽器會攔截你,是認(rèn)為你將彈出廣告等用戶不想得到的窗體堡掏,所以如果不想讓瀏覽器攔截你,你可以將這個函數(shù)改為用戶點(diǎn)擊時觸發(fā)刨疼,這樣瀏覽器就認(rèn)為是用戶想訪問這個頁面泉唁,而不是你直接彈出給用戶。
最好的解決方法:
var form = document.createElement('form');
form.action = 'www.baidu.com?id=1';
form.target = '_blank';
form.method = 'POST';
document.body.appendChild(form);
form.submit();
這種方式揩慕,如果需要傳遞參數(shù)時亭畜,需要使用 POST 方法, 默認(rèn)的get方法迎卤, 無法傳遞參數(shù)拴鸵。也就是新頁面的url中沒有參數(shù)部分。
另外蜗搔,Ajax下載文件時也是用form 表單來模擬下載劲藐。
常用的方法就是在超鏈接里加入onclick
事件,如:
<a href="javascript:void(0)" onclick="window.open()"></a>
這樣用戶點(diǎn)擊這個超鏈接樟凄,瀏覽器會認(rèn)為它是打開一個新的鏈接聘芜,所以就不會攔 截。
還有一種方法:
setTimeout('window.open(url);', 500);
使用 setTimeout 包裝一下缝龄,也可以防止被瀏覽器攔截汰现。注意這里的超時時間不能太短挂谍,否則也會被攔截。
可是有時候我們會遇到想要彈出一個窗口瞎饲,可是卻是在onckick事件執(zhí)行后口叙,才去彈出來的,這時就會被瀏覽器攔截嗅战,我們可以通過下面的方法來避免妄田,就是 先用window.open打開一個窗口,然后修改地址仗哨。如
var tempwindow=window.open('_blank');
tempwindow.location='http://www.baidu.com';
使這個窗口跳轉(zhuǎn)到百度形庭,這樣就會呈現(xiàn)彈出百度窗口的效果了。