最近在項目中有一個在瀏覽器中新開一個窗口的需求,如果不需要做任何的判斷,只是直接新開窗口的話,用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) } }) }