今天用C#封裝了WebBrowser控制元件去開啟一個本地頁面,頁面中包含了javascript指令碼,該指令碼通過WebBrowser的ObjectForScripting屬性,訪問C#程式碼。程式碼非常簡單,但沒想到開啟頁面的時候,WebBrowser報安全提示:“為幫助保護你的安全,你的Web瀏覽器已經限制此檔案顯示可能訪問你的計算機的活動內容。單擊此處檢視選項…”。尼瑪,這是我自己寫的本地頁面好不好,你WebBrowser管得太多了吧。

不過google一番後,WebBrowser或者說IE這麼設定是有原因的。大致是如果使用者把因特網上的網頁儲存到本地硬碟,再用IE開啟的時候,網頁將執行在Local Machine Zone中。XP SP2之前,Local Machine Zone的網頁具有所有許可權,這就造成了安全漏洞,因此從XP SP2後,Local Machine Zone中的網頁就預設禁用ActiveX和指令碼了。

具體可見以下兩篇文件。

我們這裡說問題的解決辦法,在頁面檔案的頭部,加上以下字串:

<!-- saved from url=(0016)http://localhost -->
這個字串的含義在上文提到的msdn文件中有說明,就是指示WebBrowser在Local Intranet Zone執行該網頁。

另外,也探索了一些相關、但實際上無效的辦法,記錄並分析如下:

1.      懷疑是自己寫的ActiveX有問題,因此給ActiveX加上IObjectSafety介面。

         無效。實際上,即使本地網頁沒有載入ActiveX,只有一段空的<script></script>標記,也會觸發安全警告。

2.      修改IE選項中的Internet和Local Intranet安全設定。

         無效。本地網頁是執行在Local Machine Zone中,與Internet和Local Intranet安全設定無關。

3.      修改IE高階選項中的“允許活動內容在我的電腦的檔案中執行。

         對IE有效。對WebBrowser控制元件無效。