開不了的窗_____window.open

來源:互聯網
上載者:User

標籤:

   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.