js打開新窗口並且不被攔截
window.open是javascript函數,該函數的作用是打開一個新窗口或這改變原來的窗口,如果你直接在js中調用window.open()函數去打開一個新窗口,瀏覽器會攔截你,那麽如何避免呢。
註意,只有直接使用js調用 window.open(url); 打開新窗口時,才會被攔截,如果是改變原理額窗口:window.open(url,‘_self‘); 則不會被攔截。
那麽 js調用 window.open(url); 打開新窗口,如何才能不會瀏覽器攔截呢?
瀏覽器會攔截你,是認為你將彈出廣告等用戶不想得到的窗體,所以如果不想讓瀏覽器攔截你,你可以將這個函數改為用戶點擊時觸發,這樣瀏覽器就認為是用戶想訪問這個頁面,而不是你直接彈出給用戶。
0)最好的解決方法:
var form = document.createElement(‘form‘);
form.action = ‘www.baidu.com?id=1‘;
form.target = ‘_blank‘;
form.method = ‘POST‘;
document.body.appendChild(form);
form.submit();
這種方式,如果需要傳遞參數時,需要使用 POST 方法, 默認的get方法, 無法傳遞參數。也就是新頁面的url中沒有參數部分。
另外,Ajax下載文件時也是用form 表單來模擬下載。
1)所以常用的方法就是在超鏈接裏加入onclick事件,如<a href="javascript:void(0)" onclick="window.open()"></a>這樣用戶點擊這個超鏈接,瀏覽器會認為它是打開一個新的鏈接,所以就不會攔 截。
2)還有一種方法:
setTimeout(‘window.open(url);‘, 500);
使用 setTimeout 包裝一下,也可以防止被瀏覽器攔截。註意這裏的超時時間不能太短,否則也會被攔截。
3)可是有時候我們會遇到想要彈出一個窗口,可是卻是在onckick事件執行後,才去彈出來的,這時就會被瀏覽器攔截,我們可以通過下面的方法來避免,就是 先用window.open打開一個窗口,然後修改地址。如
var tempwindow=window.open(‘_blank‘);打開一個窗口,然後用
tempwindow.location=‘http://www.baidu.com‘;使這個窗口跳轉到百度,這樣就會呈現彈出百度窗口的效果了。
轉載自:https://www.cnblogs.com/digdeep/p/4590337.html
js打開新窗口並且不被攔截