標籤:
window.open()是原來常用的新開視窗的方式,但是呢,現在會被大多數瀏覽器阻止掉,預設為是非使用者意願的開啟視窗,即廣告之類的。
但是通過a連結的事件來open是可以的,因為這樣會認為是使用者主觀的要開啟另一個視窗所以不予以攔截。
關於如何解決被阻止的問題,網上有很多種方式,一直未加以實踐。前段時間項目中存在這樣的需求,當時使用了幾種方式,但是未生效,最後
通過延遲更改location的方式終於解決掉了。下面結合實際討論一下。
1.a標籤的直接事件,不會被攔截。代碼如下:
links.on(‘click‘, function (e) {
e.preventDefault();
var _this = $(this);
window.open(‘/bookmerchant/fun/‘);
}
2.ajax 請求之後,進行新開視窗的操作會被攔截掉,即使是a連結出發的事件。如下:
self.addBtn.on(‘click‘, function (e) {
/*ajax請求略去*/
}).on(‘success‘, function (res) {
if (res.code == 200) {
var cusId = res.data.customerId;
window.open(‘/bookmerchant/fun/‘);
}。
此時的window.open()是不可行的。
網上看到的解決措施:
1.建立a標籤然後,綁定事件,然後js觸發。這種在我的實際操作中是同樣被攔截的。
2.在請求之前新開標籤window.open();然後請求接受之後更改location,這樣是可以的。
var newTab=window.open(‘about:blank‘);
/*ajax請求*/
}).on(‘success‘, function (res) {
if (res.code == 200) {
newTab.location.href=‘/bookmerchant/fun‘;
}
3.還有一種方式是新開標籤window.open(),然後通過setTimeout()來延遲設定location,原理相同應該也是可行的(此處未實踐,所以不敢說一定)。
4.通過form提交的方式進行跳轉,同樣未實踐,不加評論。只是拿出來給大家一種提醒。
開不了的窗_____window.open