標籤: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‘);" />