分類  >  Web前端 >

瀏覽器遏止新窗口(window.open或新窗的form提交)

tags:    時間:2013-12-10 00:42:28
瀏覽器阻止新窗口(window.open或新窗的form提交)

在寫js時,經常會出現瀏覽器會阻止用js寫的window.open代碼,但是,又不是每次都會阻止,它只會阻止特定情況下的window.open。因為如果瀏覽器默認都阻止window.open代碼是不現實的,所以觀察chrome瀏覽器對window.open阻止情況的總結如下:

瀏覽器不會阻止用戶主動發起的window.open方法;瀏覽器一般都會阻止非用戶主動發起的window.open。

這裡有一個問題,什麼叫用戶主動發起?

如下代碼在執行過程中就是用戶主動發起

<a href="window.open('http://www.baidu.com','_blank');">百度</a>

如下代碼在執行過程中會被認為非用戶主動發起:

<a href="javascript:setTimeout(function(){window.open('http://www.baidu.com','_blank')},2000);">百度</a>

也就是說,用戶觸發一個事件后,事件處理函數所執行的window.open會被認為是合理的不會被阻止;但是,如果是由非同步方式再執行window.open 會被瀏覽器阻止,因為瀏覽器認為不是由用戶主支發起的,而是js代碼自己發起的。這裡就涉及到js前端代碼經常會用到的ajax調用了,如果用到ajax時用的是非同步執行(默認都是非同步執行),那麼就會經常出現window.open會被阻止。解決的方法是把ajax設置成同步。

$.ajax({  

           async: false, //就是設置這個最為關鍵的ajax同步  

           type: 'POST',  

           url: ctx + "/sales/submitBank",  

           data: orderPost,  

           success: function(datas){  

               result = datas;  

           }  

       }); 

以上描述同樣適用於form提交

Dwr可以直接改寫參數:

async:false即可

推薦閱讀文章

Bookmark the permalink ,來源:互聯網