解決window.open被攔截問題


最近在項目中有一個在瀏覽器中新開一個窗口的需求,如果不需要做任何的判斷,只是直接新開窗口的話,用a標簽即可。

但是如果需要做一些判斷再新開一個窗口的話,就不能使用a標簽了。window.open確實可以打開一個新窗口,但會被瀏覽器當作廣告被攔截,需要手動去解除攔截。

在網上搜索了很多,但並沒有一個可以解決的。

於是,使用了form提交新開窗口的黑科技

demo1

<html>
<body>
  <form name="xxxForm" action="/example/html/form_action.asp" method="get" target="_blank">
    <input type="hidden" name="fname" value="1" />
    <br />
    <input type="hidden" name="lname" value="2" />
    <br />
    <input id="sub" type="submit" value="Submit" style="display: none;" />
    <input id="ck" type="button" value="提交">
  </form>

  <script>
    document.getElementById('ck').onclick = function (e) {
      document.getElementById('sub').click();
      // this.refs.xxxform.submit();  如果點擊模擬不行用這個
    }
  </script>
</body>
</html>            

action 是你需要跳轉的頁面,method用get(我自己在用post的時候出現了一些問題)

只要頁面加載時提前查好數據,直接提交form表單就可以。去掉ajax就可以。原則就是form的默認submit觸發前不能setTimeout或者ajax

demo2

// 開通成功后跳轉新頁面
*open2({ payload }, { call, put, select }) {
  let tmpState = yield select(state => state[tmpModule.namespace]);
  try {
    yield put({
      type: 'open',
      payload: {}
    })
    // 打開新的窗口
    yield openNewWin()
  } catch (err) {
    console.error(err)
  }
}

// 打開新頁面
const openNewWin = () => {
  return new Promise((resolve, reject) => {
    if (!isEmpty(Cookie.get('trunTenantId'))) {
      var str = [];
      let url = `${Config.jumpUrl}?auth=${Cookie.get(Config.cookie.auth)}&tenantId=${Cookie.get('trunTenantId')}`
      // let url = `http://localhost:8009/#/home/operationMonitoring/operateScreen?auth=${Cookie.get(Config.cookie.auth)}&tenantId=${Cookie.get('trunTenantId')}`
      str.push(`<form action=${url} id="gobank" method="get">`);
      str.push('</form>');
      $("body").append(str.join(''));
      $("#gobank").attr('target', '_blank');
      $("#gobank").submit();
      console.log('open win ok');
      resolve(1)
    } else {
      reject(0)
    }
  })
} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM