您的 Web 站點(diǎn)是否使用 Microsoft ActiveX 控件?
在 Windows XP Service Pack 2 (SP2) 中,ActiveX 控件的模式安裝提示最初由“信息欄”阻止。如果滿足下列條件,則對(duì)已安裝在計(jì)算機(jī)上的控件進(jìn)行升級(jí)時(shí),就會(huì)引發(fā)一個(gè)異常:
• 注冊(cè)為 ActiveX 控件的文件必須使用 Authenticode 技術(shù)簽名。(該文件引用自 HKEY_CLASSES_ROOT\CLSID\{control_clsid}\InProcServer32,其中 control_clsid 為 CLSID,由 OBJECT 標(biāo)記指定。)
• 新控件的發(fā)布者名稱以數(shù)字簽名表示,它與現(xiàn)有控件數(shù)字簽名中的發(fā)布者名稱相匹配。
• 如果 ActiveX 控件打包為一個(gè) CAB 文件,則該 CAB 文件必須經(jīng)過簽名。要安裝的 DLL 或 OCX 也應(yīng)該進(jìn)行簽名,以便隨后的升級(jí)可以跳過“信息欄”。
如果“信息欄”阻止某個(gè) ActiveX 控件,并且該控件會(huì)占用頁面上的區(qū)域,則 Internet Explorer 將顯示一個(gè)嵌入式圖標(biāo)和文本(而不是控件),表示需要安裝 ActiveX 控件。最終用戶將能夠單擊該區(qū)域或“信息欄”,以安裝 ActiveX 控件。
ActiveX 控件是否以 CAB 文件的形式分發(fā)?
如果是,請(qǐng)注意有關(guān)升級(jí)該控件的未來安裝提示也會(huì)被“信息欄”阻止,除非您對(duì)要注冊(cè)為 ActiveX 控件的 DLL 或 OCX 進(jìn)行簽名。
根據(jù)是否安裝有 ActiveX 控件,您的 Web 站點(diǎn)是否具有不同的行為(例如,自動(dòng)重定向或刷新時(shí)的特殊行為)?
如果尚未安裝控件就進(jìn)行刷新,某些網(wǎng)頁將自動(dòng)進(jìn)行重定向或表現(xiàn)不同。在某些情況下,以這種方式構(gòu)建站點(diǎn)可能會(huì)阻止用戶安裝該控件,從而帶來不好的用戶體驗(yàn)。
由于網(wǎng)頁無法區(qū)分是用戶拒絕 ActiveX 控件的安裝,還是“信息欄”阻止控件,所以安裝 ActiveX 控件的推薦做法是:在一個(gè)解釋控件用途的單獨(dú)網(wǎng)頁上創(chuàng)建該控件的一個(gè)實(shí)例。此外,還應(yīng)在 < OBJECT > 標(biāo)記中使用 < SPAN > 部分,以便為用戶動(dòng)態(tài)提供有關(guān)安裝失敗的“幫助”文本。
您的 Web 站點(diǎn)是否具有 Authenticode 對(duì)話框的圖像?
為了防止用戶混淆,您可以更新這些圖像來反映新的 Authenticode 用戶界面 (UI)。您可以使用用戶代理字符串來確定瀏覽器的正確版本。(有關(guān)檢測 SP2 的詳細(xì)信息,請(qǐng)參閱常用技巧。)
ActiveX 安裝對(duì)話框是否能阻止控件進(jìn)行安裝?
如果對(duì)話框沒有提供安裝 ActiveX 控件的選項(xiàng),則說明該文件可能沒有進(jìn)行正確簽名。請(qǐng)確保您的文件已簽名,并且該簽名仍然有效。默認(rèn)情況下,當(dāng) ActiveX 控件的簽名無效時(shí),SP2 會(huì)阻止該控件的安裝。
ActiveX 最佳做法
• 不要使用彈出窗口或 HTML 對(duì)話框來安裝 ActiveX 控件。
• 不要建議用戶降低他們的安全設(shè)置來安裝 ActiveX 控件。
• 在描述控件的用途和對(duì)最終用戶影響的單獨(dú)頁面上創(chuàng)建 ActiveX 控件的一個(gè)實(shí)例。
您的 Web 站點(diǎn)是否允許用戶下載文件?
在 SP2 中,“信息欄”將阻止能夠自動(dòng)啟動(dòng)的文件下載提示。
在 SP2 中,用于文件下載、郵件附件、Shell 進(jìn)程處理和程序安裝的提示已經(jīng)進(jìn)行了修改,比它們?cè)?Windows XP Service Pack 1 (SP1) 中更加一致、清晰。在 SP2 中,在下載可能會(huì)潛在損害用戶計(jì)算機(jī)并可以進(jìn)行簽名的文件類型后,將顯示發(fā)布者信息。(可以進(jìn)行簽名并可能潛在損害用戶計(jì)算機(jī)的常見文件類型包括 .exe、.dll、.ocx 和 .msi)。
您的 Web 站點(diǎn)是否會(huì)自動(dòng)啟動(dòng)下載提示?
如果當(dāng)用戶沒有使用鼠標(biāo)單擊或按鍵來啟動(dòng)導(dǎo)航時(shí),Web 站點(diǎn)嘗試導(dǎo)航到生成文件下載對(duì)話框的資源,則文件下載提示將被“信息欄”阻止。
要確保下載不會(huì)被阻止,您可以將所有下載作為一個(gè)直接用戶操作的結(jié)果。
您的 Web 站點(diǎn)是否包含其文件擴(kuò)展名與其內(nèi)容類型不匹配的文件?
如果您的站點(diǎn)包含由 MIME 處理程序處理的文件,則這些文件的擴(kuò)展名應(yīng)對(duì)應(yīng)于與 MIME 處理程序相同的 ProgID。如果給定文件的內(nèi)容類型 ProgID 與文件擴(kuò)展名 ProgID 不匹配,則 XP SP2 中的 Internet Explorer 可能會(huì)采取下列操作:1) 可能會(huì)提示用戶下載文件;2) 如果該文件無法在 MIME 處理程序中處理,則它將不會(huì)在擴(kuò)展名處理程序中處理。
您可以通過更改內(nèi)容類型以匹配文件擴(kuò)展名,來修正這些不匹配。請(qǐng)確定這也適用于您的網(wǎng)頁。
例外:此更改不會(huì)影響發(fā)送“content-disposition=attachment”標(biāo)頭的情況。在這些情況下,服務(wù)器建議的文件名或擴(kuò)展名被認(rèn)為是最終名稱,并且不會(huì)隨多用途 Internet 郵件擴(kuò)展 (MIME) 探測而更改。
您的 Web 站點(diǎn)是否在站點(diǎn)上具有下載對(duì)話框的圖像,或者顯示在哪里單擊以接受控件的圖像/文本?
如果客戶使用的是 Windows XP Service Pack 2,請(qǐng)確保更新指向下載提示的所有圖像,以反映新的下載對(duì)話框。要確定顯示圖像的版本,您可以在 Internet Explorer 中使用“用戶代理”字符串(有關(guān)檢測 SP2 的詳細(xì)信息,請(qǐng)參閱常用技巧)。
您的 Web 站點(diǎn)是否具有應(yīng)進(jìn)行數(shù)字簽名的下載?
現(xiàn)在,SP2 可以檢查能夠進(jìn)行數(shù)字簽名的文件的數(shù)字簽名。這些文件的最常見示例包括具有以下擴(kuò)展名的文件:.exe、.dll、.cab、.ocx 和 .msi。如果您是可以使用 Authenticode 技術(shù)進(jìn)行簽名的文件的發(fā)布者,那么現(xiàn)在客戶將能夠驗(yàn)證您創(chuàng)建的文件。這適用于 Internet Explorer 和 Outlook Express。
您的 Web 站點(diǎn)是否使用彈出窗口?
Internet Explorer 包括有在 SP2 中默認(rèn)開啟的彈出阻止程序。這個(gè)彈出阻止程序可能會(huì)干預(yù)自動(dòng)從腳本中生成新窗口的站點(diǎn)。對(duì)于需要自動(dòng)彈出的情況,該彈出阻止程序包含了一個(gè)有幫助的“允許”列表。默認(rèn)情況下,彈出阻止程序不會(huì)嘗試阻止從 Intranet 或受信任站點(diǎn)區(qū)域啟動(dòng)的彈出。
Internet Explorer 將彈出窗口視為何物?
Internet Explorer 將嘗試阻止從腳本自動(dòng)打開的任何窗口,但 createPopup() 除外。某些受到影響的常用函數(shù)包括 window.open()、showModelessDialog()、showModalDialog() 和 showHelp()。(注:自動(dòng)以搜索窗格為目標(biāo)的操作也會(huì)因彈出阻止限制而被阻止。)
作為用戶操作的直接結(jié)果而打開的彈出窗口不會(huì)被阻止,例如單擊某個(gè)頁面元素。默認(rèn)情況下,彈出阻止沒有應(yīng)用到 Intranet 或受信任站點(diǎn)區(qū)域。
如何確定 Internet Explorer 是否阻止了我的彈出窗口?
如果窗口被阻止,那么返回窗口對(duì)象的函數(shù)將返回空值。當(dāng)彈出被阻止時(shí),在使用 window.open() 的返回值來避免腳本錯(cuò)誤之前,請(qǐng)始終對(duì)該值進(jìn)行檢查。
您的站點(diǎn)是否能根據(jù)阻止的彈出進(jìn)行重定向或關(guān)閉頁面?
只要可能,請(qǐng)不要根據(jù)阻止的內(nèi)容進(jìn)行重定向或關(guān)閉窗口。如果在彈出被阻止時(shí),您的站點(diǎn)重定向到其他站點(diǎn),那么對(duì)于客戶而言,可能很難顯示被阻止的彈出。在這種情況下,重定向的站點(diǎn)不會(huì)顯示通常出現(xiàn)的“信息欄”,無法讓用戶輕松地訪問彈出內(nèi)容。
同樣,如果某個(gè)窗口由于阻止彈出而關(guān)閉,那么顯示該阻止彈出的“信息欄”入口點(diǎn)將與該窗口一起消失。
您的站點(diǎn)是否從彈出中啟動(dòng)彈出?
只要可能,請(qǐng)不要從一個(gè)彈出窗口中啟動(dòng)另一個(gè)自動(dòng)彈出窗口。在彈出阻止程序中,第二個(gè)啟動(dòng)不會(huì)被視為用戶操作,因而會(huì)被阻止。
是否自動(dòng)啟動(dòng) setHomePage() 對(duì)話框?
在 Windows XP Service Pack 2 中,setHomePage() 函數(shù)只能從用戶操作中啟動(dòng),類似于彈出窗口。自動(dòng)啟動(dòng)的 setHomePage() 提示將被阻止。
如果異步請(qǐng)求信息,您的 Web 站點(diǎn)是否會(huì)打開一個(gè)新窗口?
如果站點(diǎn)在異步請(qǐng)求信息后打開特定的窗口,則 Internet Explorer 可能會(huì)阻止這些窗口,即使用戶單擊了鏈接以打開該窗口。如果在請(qǐng)求異步信息之前,直接從用戶啟動(dòng)的操作(鼠標(biāo)單擊)打開窗口,那么這些窗口不會(huì)被阻止。用戶啟動(dòng)的操作不能跨導(dǎo)航保持。
您的 Web 站點(diǎn)是通過 ActiveX 控件啟動(dòng)彈出窗口,還是通過頁面上的其他對(duì)象啟動(dòng)彈出窗口?
對(duì)于其他彈出窗口,如果窗口不是從用戶操作啟動(dòng)的,那么彈出阻止程序就會(huì)阻止它。一個(gè)窗口必須響應(yīng)直接用戶操作才允許被打開。
一般彈出建議
• 請(qǐng)不要在彈出窗口失敗時(shí)進(jìn)行重定向。
• 如果彈出窗口、下載或 ActiveX 控件被阻止,請(qǐng)不要關(guān)閉或自動(dòng)重定向?yàn)g覽器窗口。如果您關(guān)閉或重定向?yàn)g覽器窗口,用戶將無法在“信息欄”上單擊并接受彈出窗口、下載或 ActiveX 控件。
• 請(qǐng)不要從彈出窗口中啟動(dòng)彈出窗口。
• 請(qǐng)不要從一個(gè)用戶操作啟動(dòng)多個(gè)彈出窗口。
• 請(qǐng)不要從 showModelessDialog() 或 showModalDialog() 調(diào)用中啟動(dòng)自動(dòng)彈出窗口。
您的 Web 站點(diǎn)是否依賴于 Microsoft Java 虛擬機(jī) (MSJVM)?
請(qǐng)參閱 Microsoft Web 站點(diǎn)上的 Microsoft Java Virtual Machine Support。
瀏覽器窗口限制
您的 Web 站點(diǎn)是否將窗口布置為,使標(biāo)題欄或地址欄位于可見顯示頂端的上面,或者使?fàn)顟B(tài)欄位于可見顯示底端的下面?
檢查代碼以確保您理解使用 window.open() 或 window.createPopup() 方法對(duì)腳本啟動(dòng)的窗口進(jìn)行的限制。腳本可以調(diào)用相同的方法來創(chuàng)建 Internet Explorer 有邊窗口(使用 window.open() 方法),或 Internet Explorer 無邊彈出窗口(使用 window.createPopup() 方法)。但是,您可能需要檢查設(shè)計(jì),以確保彈出窗口在適當(dāng)?shù)臅r(shí)候?qū)τ脩艨梢姡⑶覡顟B(tài)欄包含的信息正確。
下列指導(dǎo)將說明如何在運(yùn)行 Windows Restrictions Security 功能的過程中使用腳本啟動(dòng)的窗口調(diào)用。
對(duì)于使用 window.open() 打開的窗口:
• 預(yù)期狀態(tài)欄會(huì)出現(xiàn),并為其編寫代碼。默認(rèn)情況下,狀態(tài)欄為開啟,并且高度為 20-25 像素。
• 調(diào)整窗口的大小和內(nèi)容,使它在視覺上適合窗口的整體大小。窗口不能覆蓋任務(wù)欄,因此如果狀態(tài)欄為開啟狀態(tài),并且未考慮到任務(wù)欄,它可能會(huì)損失 40 像素。窗口在任務(wù)欄外的垂直大小不能超過 30 像素。
• 不要在屏幕外打開窗口 - 它們會(huì)進(jìn)行一段最小的 X 和 Y 坐標(biāo)偏移,使窗口完全顯示在屏幕上。
• 與前面一樣,窗口的顯示會(huì)受到顯示主題、字體大小和分辨率的影響,因此在您設(shè)計(jì)窗口時(shí),可能還需要考慮這些 UI 的影響。
• 注:現(xiàn)在,帶有 fullscreen=yes 的 window.open() 會(huì)導(dǎo)致最大化的窗口,而不是 kiosk 模式的窗口。
對(duì)于使用 window.createPopup() 打開的窗口:
• 調(diào)整窗口的大小和內(nèi)容,使它在視覺上適合窗口的整體大小。使用這個(gè)新功能,窗口將不會(huì)覆蓋其父窗口的標(biāo)題欄或狀態(tài)欄,因此如果未考慮到標(biāo)題欄或狀態(tài)欄,它可能會(huì)損失 40 像素。請(qǐng)調(diào)整窗口的垂直大小,使其不超過頁面的當(dāng)前可見區(qū)域。
• 不要在 Internet Explorer 的 HTML 生成表面之外打開無邊瀏覽窗口 - 它們會(huì)進(jìn)行一段最小的 X 和 Y 坐標(biāo)偏移,使窗口完全顯示在客戶端區(qū)域內(nèi)。但有一個(gè)例外:最多有半個(gè)窗口可以存在于 Internet Explorer 客戶端區(qū)域的左側(cè)或右側(cè)邊緣之外。
• 與前面一樣,窗口的顯示會(huì)受到顯示主題、字體大小和分辨率的影響,因此在您設(shè)計(jì)窗口時(shí),可能還需要考慮這些 UI 的影響。
常用技巧
檢測 SP2 中的 Internet Explorer
如果連接到您站點(diǎn)的瀏覽器是 SP2 中的 Internet Explorer,您可以使用 window.navigator.userAgent 來檢測。
var g_fIsSP2 = false;
function browserVersion()
{
g_fIsSP2 = (window.navigator.userAgent.indexOf("SV1") != -1);
if (g_fIsSP2)
{
//This browser is Internet Explorer in SP2.
}
else
{
//This browser is not Internet Explorer in SP2.
}
}
如果用戶代理字符串中包含“SV1”,說明連接到您站點(diǎn)的瀏覽器是 SP2 中的 Internet Explorer。
您的站點(diǎn)是使用 showModelessDialog() 調(diào)用還是 showModalDialog() 調(diào)用?
如果可能,請(qǐng)不要嘗試創(chuàng)建 ActiveX 控件的新實(shí)例、自動(dòng)啟動(dòng)文件下載或從這些對(duì)話框中自動(dòng)啟動(dòng)彈出窗口。在這個(gè)方案中,當(dāng)內(nèi)容被阻止時(shí)將不會(huì)顯示“信息欄”,因此用戶將無法輕松地允許該內(nèi)容。建議的解決方案是從 Internet Explorer 窗口中啟動(dòng)這些行為。
在內(nèi)容受到阻止時(shí),您的站點(diǎn)是否會(huì)重定向到另一個(gè)網(wǎng)頁?
如果可能,在瀏覽器阻止內(nèi)容(例如 ActiveX 控件、下載提示或彈出)時(shí),請(qǐng)不要嘗試重定向到另一個(gè)網(wǎng)頁。在阻止該內(nèi)容時(shí),“信息欄”可能不會(huì)出現(xiàn)在重定向的頁面上,因此用戶可能無法輕松地查看該內(nèi)容。