關於頁面中 JS 中windown.open( )方法打開新頁面有可能會被瀏覽器攔截的問題

       前言,在項目中忽然間遇到了一個狀況,一樣的代碼怎麼有點地方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>
相關文章
相關標籤/搜索