鍍金池/ 問答/HTML/ ajax回調(diào)中打開新窗口如何避免被攔截?

ajax回調(diào)中打開新窗口如何避免被攔截?

需求是這樣的,有A,B兩個(gè)頁面,從A跳到B,發(fā)起ajax請求,成功后回到A,且阻止用戶再回到B.

目前比較中意的解決方案是請求成功后直接新開一個(gè)窗口A,把原有窗口斃掉。

但遇到兩個(gè)問題,如果在回調(diào)中執(zhí)行window.open()會被瀏覽器攔截,網(wǎng)上的解決辦法是在調(diào)用ajax請求前新開一個(gè)空白窗口,但這個(gè)操作也是需要用戶點(diǎn)擊才可以,如果ajax不是用戶點(diǎn)擊發(fā)起的還是會被攔截。

button.addEventListener('click', function() {
    var a = window.open('about:blank');// 寫在ajax請求前
    setTimeout(() => {
      // 如果成功
      a.location.href = 'www.baidu.com';
      // 如果失敗
      // a.close();
    }, 1000);
  })

  setTimeout(() => {
    // 不是用戶自己點(diǎn)擊的,還是會被攔截
    button.click();
  }, 2000);

還有就是關(guān)閉當(dāng)前頁也是個(gè)問題。

請問有沒有更好的方案,急求

回答
編輯回答
尐潴豬

你說的這2個(gè)是瀏覽器的限制,起因是避免js濫用,這么規(guī)定已經(jīng)很久了。如果不靠用戶的真實(shí)點(diǎn)擊觸發(fā),空白窗口就是會被屏蔽。
其他方法:
1.在當(dāng)前頁面創(chuàng)建一個(gè)浮動窗口(position),內(nèi)嵌iframe。
2.做成app下一級頁面打開效果。

2017年6月7日 15:49
編輯回答
空痕

其實(shí)不需要“打開新窗口,關(guān)閉舊窗口”那么麻煩,你的期望不是“讓用戶沒法再回到b”么?這個(gè)“沒法回到”,我是不是可以這樣理解,想阻止用戶通過瀏覽器的“回退”鍵跳回b頁面?

如果是的話,在你的ajax成功后,可以用location.replace(頁面a的地址)來重定向到a頁面,這樣點(diǎn)“回退”是回不到頁面b的

2017年9月2日 00:18