前言,在項目中忽然間遇到了一個狀況,一樣的代碼怎麼有點地方window.open()打開的新頁面不被攔截,有的地方又被攔截了呢,我百思不得其解,因而上網查了下,終於明白這是什麼緣由了,下面一一講述。php
如今,先講下打開新頁面的方法,主要有一下幾種:html
第一種:a標籤 '<a href="test.php"target="_blank">,target="_blank"爲打開一個新的窗口,不然,爲當前頁面跳轉到指定頁面;jquery
第二種:form表單'<form action="drag.html" method="get" id="form" target="_blank"/></form>',提交表單便可打開新頁面,target='target',則將表單信息提交至新打開的指定頁面,不然當前頁面跳轉到指定頁面;ajax
第三種:window.location 執行window.location='test.php',頁面將跳轉到指定頁面。json
第四種:window.open(url);執行window.open('test.php'),將會打開心新的指定頁面,當前頁面不變。
瀏覽器
如今在對瀏覽器打開新頁面的問題作一下簡單小結,瀏覽器對於用戶點擊行爲直接打開的頁面通常不會攔截,好比不經過JS直接點擊a、提交form表單,瀏覽器是不會阻止其跳轉頁面或者打開新頁面行爲的。可是對於JS打開新頁面瀏覽器會好好審覈的,以下面的例子,不少瀏覽器回去攔截。async
<form action="test.php" method="get" id="form" target="_blank"/>//target爲彈出新窗口 <input type="hidden" name="name" value="ck"> <input type="hidden"id="pwd" name="id" value="123456"> <input type="submit" style="display:none;" value="提交"> </form> <button id="btnSubmitForm">點擊我提交表單</button> <button id="btnAjaxSubmitForm">點擊我發送ajax提交表單</button> <script src="js/jquery-1.8.0.min.js"></script> <script> $("#btnSubmitForm").on('click,function(){ window.open(url); $("#form").submit(); }) //下面這種代碼是系統自動執行的默認會被攔截。 window.open(url); $("#form").submit(); $("#btnSubmitForm").trigger('click'); $.post(url,json,function(){ //下面兩種也會被瀏覽器當成廣告給攔截掉。瀏覽器認爲ajax發送以後執行的如下事件等同於系統自動觸發的都會去阻止。 window.open(url); $("#form").submit(); $("#btnSubmitForm").trigger('click'); }) </script>
上面是最簡單的2種會被瀏覽器當成廣告的狀況,那麼該如何避免避免這種狀況呢,很簡單,咱們能夠經過如下方法:post
<form action="test.php" method="get" id="form" target="_blank"/>//target爲彈出新窗口 <input type="hidden" name="name" value="ck"> <input type="hidden"id="pwd" name="id" value="123456"> <input type="submit" style="display:none;" value="提交"> </form> <button id="btnSubmitForm">點擊我提交表單</button> <button id="btnAjaxSubmitForm">點擊我發送ajax提交表單</button> <script src="js/jquery-1.8.0.min.js"></script> <script> // 第一種方法點擊直接觸發window.open()或者$(form).submit(); $("#btnSubmitForm").on('click,function(){ window.open(url); $("#form").submit(); }) //第二種方法 如果點擊發送ajax觸發方法,這裏要強調一下無論是自動發送ajax仍是手動發送ajax成功以後調用的方法內部用Window.open()或者$(form).submit()均可能會被認爲是廣告。下面個人解決方法是,手動同步發送ajax,以後 將ajax的值賦予變量,再在ajax方法以後調用Window.open()或者$(form).submit()就能夠避免這種問題。 $("#btnAjaxSubmitForm").on('click,function(){ $.ajax({ url: "test.php", async: false, success:function(){ } }) Window.open()或者$(form).submit() }) 這樣就沒問題了。 </script>