關於window.open快顯視窗被阻止的問題

來源:互聯網
上載者:User

標籤:blog   http   color   使用   os   art   

原文:http://blog.csdn.net/fanfanjin/article/details/6858168

在web編程過程中,經常會遇到一些頁面需要快顯視窗,但是在伺服器端用window.open彈出的視窗會被IE阻止掉,showModalDialog彈出的視窗有時並不能滿足我們需要,我們需要彈出新的瀏覽器視窗。

為什麼我們編寫的快顯視窗會被IE阻止呢,原來IE會自動判斷快顯視窗的狀態,它會阻止自動彈出的視窗,而通過我們用滑鼠點擊彈出的視窗,它是不會阻止的。這裡就有一個問題,有人說:我的程式是寫在伺服器按鈕裡的,也是通過滑鼠點擊彈出的呀!其實只有在載入頁面後,我們點擊到彈出這段時間頁面沒有被重新載入的情況下,彈出的視窗才不會被阻止!這也就是說,寫在伺服器控制項的回傳事件裡的window.open都會被阻止。

如果想要快顯視窗而不被阻止, 必須是使用者點擊之後使用window.open方可, 但是如果點擊後有非同步處理操作, 而且是在操作成功後再彈出, 那麼這個新視窗就會被阻止了。

    所以為了變通處理, 點擊後就彈出一個空白的新視窗, 然後非同步處理結束後再設定目標路徑即可。

------------------------------------------------------------------------------------------------------------------------------

方案 1

如:

tempFunc=function(){
      var item=prodGrid.getItem(0);
      if(!item)return;
      var orderItemId=prodStore.getValue(prodGrid.getItem(0),‘purchaseOrderItemId‘);
var p=window.open(‘about:blank‘);
      var xhrArgs = {
                 url: "buyFromPreparation.action?orderItemId="+orderItemId,
                    load: function(data){
         prodStore.save();
         prodStore.url=‘getPpi.action?currentCategory1=‘+currentCategory1;
         prodStore.close();
         prodGrid._refresh();
          if(!p) alert("彈出的訂單處理視窗被阻止了,請手動設定允許此視窗被開啟。");
         p.location=‘checkOrder.action?orderId=‘+data;        
        },
                    error: function(error) {alert(error);}
             };     
      var d= dojo.xhrGet(xhrArgs);
     };

(先開啟一個空視窗,等判斷邏輯之後再 指定路徑)

為什麼我們編寫的快顯視窗會被IE阻止呢,原來IE會自動判斷快顯視窗的狀態,它會阻止自動彈出的視窗,而通過我們用滑鼠點擊彈出的視窗,它是不會 阻止的。這裡就有一個問題,有人說:我的程式是寫在伺服器按鈕裡的,也是通過滑鼠點擊彈出的呀!其實只有在載入頁面後,我們點擊到彈出這段時間頁面沒有被 重新載入的情況下,彈出的視窗才不會被阻止!這也就是說,寫在伺服器控制項的回傳事件裡的window.open都會被阻止。

最簡單有效方法如下:
在window.open()函數中增加一個參數,將target設定為‘self’,
即改為使用: window.open(link,‘_self‘);

微軟的網站上的說明:http://technet.microsoft.com/zh-cn/library/cc766478(v=WS.10).aspx

Pop-Up Blocking
The Pop-up Blocking feature blocks pop-up (and pop-under) windows initiated automatically by a Web site. Internet Explorer blocks Pop-up windows in the Internet and Restricted sites zones by default. However, the Pop-up Blocker enables pop-up windows initiated by a user action. Users can configure Internet Explorer 6 for Windows XP with SP2 to be more or less restrictive. Users can also turn off the Pop-up Blocker altogether. Generally, the Pop-up Blocker enables a window to open under the following circumstances:

? When initiated by user action, such as clicking a button or hyperlink

? When opened in the Trusted sites and Local intranet zones (considered safe)

? When opened by other applications running on the local computer

The affected script methods are:

window.open
window.showHelp
window.showModalDialog
window.showModelessDialog
window.external
window.NavigateAndFind
註:
Pop-ups created with window.createPopup are unaffected by the Pop-up Blocker.

------------------------------------------------------------------------------------------------------------------------------------------------------------

方案 2

由於在使用window.open時,在很多情況下,彈出的視窗會被瀏覽器阻止,但若是使用a連結target=‘_blank‘,則不會,基於這一特點,自己封裝了一個open方法:

function openwin(url) {
var a = document.createElement("a");
    a.setAttribute("href", url);
    a.setAttribute("target", "_blank");
    a.setAttribute("id", "openwin");
    document.body.appendChild(a);
    a.click();
}

調用方式如下:

<input type="button" id="btn" value="百度" onclick="openwin(‘http://www.baidu.com‘);" />

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.