解决WebBrowser控件打开本地页面报安全提示的问题

今天用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和脚本了。

具体可见以下两篇文档。

http://blogs.msdn.com/b/ieinternals/archive/2011/03/23/understanding-local-machine-zone-lockdown-restricted-this-webpage-from-running-scripts-or-activex-controls.aspx

http://msdn.microsoft.com/en-us/library/ms537628%28v=vs.85%29.ASPX

 

我们这里说问题的解决办法,在页面文件的头部,加上以下字符串:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!-- saved from url=(0016)http://localhost -->  
其中0016表示字符串的长度, 这个字符串的含义在上文提到的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控件无效。


消除IE的黄色警告的方法,以及save from url的使用

“为帮助保护您的安全,Internet Explorer 已经限制此文件显示可能访问您计算机的活动内容。单击此处查看选项…” 
计算机上的网页尝试运行脚本或 ActiveX 控件时,该消息出现。Internet Explorer 将阻止该活动,这样您可以查看没有脚本或 ActiveX 控件时网页的工作方式;通常,您可以在不使用活动内容因而没有安全风险的情况下查看或使用网页。因为脚本或 ActiveX 控件可能对您的计算机有害,所以您应该在决定授予 ActiveX 控件访问您计算机的权限前确定您信任该脚本或 ActiveX 控件的发行商。 
如果您确定需要允许网页在您的本地计算机上运行脚本和 ActiveX 控件,请按照下列步骤进行操作: 
1.单击“信息栏”。 
2.单击“允许被阻止的内容”。 
有关如何决定是否应该信任网站或发行商的信息,请单击“相关主题”。 

解决方法: 

注意:您可以向本地 HTML 文件中添加一条“saved from URL”注释,以指示 Internet Explorer 对本地计算机上的 HTML 内容应用其他区域的设置。例如,您可以向一个本地 HTML 文件中添加一条“saved from URL”注释,以便可以将该 HTML 文件分配到 Internet 区域而不是本地计算机区域。如果您在 Internet 区域中允许脚本、签名的 ActiveX 控件和 Java 小程序,那么该本地 HTML 文件将使用这些缩减的安全权限运行。要指示 Internet Explorer 对名为 Test.htm 的本地 HTML 文件使用 Internet 区域,请向 Test.htm 中添加以下注释。请在 <HTML> 标记前面单独使用一行来添加该注释。 

<!-- saved from url=(0023)http://www.contoso.com/ --> 
其中,(0023) 值是它后面的 URL 的字符串长度,Contoso 是 Internet Web 站点的名称。当 Internet Explorer 打开 Test.htm 时,Internet Explorer 将查找“saved from URL”注释,并使用适合该 URL 的区域设置来确定对该 Web 页应用哪种安全策略。 

但是上面的做法会导致页面上的链接不可用 

于是又改成了下面的写法: 
<!-- saved from url=(0014)about:internet -->


“为帮助保护您的安全,Internet Explorer 已经限制此文件显示可能访问您计算机的活动内容。单击此处查看选项…” 
计算机上的网页尝试运行脚本或 ActiveX 控件时,该消息出现。Internet Explorer 将阻止该活动,这样您可以查看没有脚本或 ActiveX 控件时网页的工作方式;通常,您可以在不使用活动内容因而没有安全风险的情况下查看或使用网页。因为脚本或 ActiveX 控件可能对您的计算机有害,所以您应该在决定授予 ActiveX 控件访问您计算机的权限前确定您信任该脚本或 ActiveX 控件的发行商。 
如果您确定需要允许网页在您的本地计算机上运行脚本和 ActiveX 控件,请按照下列步骤进行操作: 
1.单击“信息栏”。 
2.单击“允许被阻止的内容”。 
有关如何决定是否应该信任网站或发行商的信息,请单击“相关主题”。 

解决方法: 

注意:您可以向本地 HTML 文件中添加一条“saved from URL”注释,以指示 Internet Explorer 对本地计算机上的 HTML 内容应用其他区域的设置。例如,您可以向一个本地 HTML 文件中添加一条“saved from URL”注释,以便可以将该 HTML 文件分配到 Internet 区域而不是本地计算机区域。如果您在 Internet 区域中允许脚本、签名的 ActiveX 控件和 Java 小程序,那么该本地 HTML 文件将使用这些缩减的安全权限运行。要指示 Internet Explorer 对名为 Test.htm 的本地 HTML 文件使用 Internet 区域,请向 Test.htm 中添加以下注释。请在 <HTML> 标记前面单独使用一行来添加该注释。 

<!-- saved from url=(0023)http://www.contoso.com/ --> 
其中,(0023) 值是它后面的 URL 的字符串长度,Contoso 是 Internet Web 站点的名称。当 Internet Explorer 打开 Test.htm 时,Internet Explorer 将查找“saved from URL”注释,并使用适合该 URL 的区域设置来确定对该 Web 页应用哪种安全策略。 

但是上面的做法会导致页面上的链接不可用 

于是又改成了下面的写法: 
<!-- saved from url=(0014)about:internet -->



To help protect your security, Internet explorer has restricted this web page from running scripts or ActiveX controls that could access your computer. Click here for the options


Check out http://msdn.microsoft.com/en-us/library/ms537628(v=vs.85).aspx

If you want to run in the Internet zone add this to your HTML source:

<!-- saved from url=(0014)about:internet -->

If you want to run in the Intranet zone add this to your HTML source:

<!-- saved from url=(0016)http://localhost -->

Either will stop the message from displaying and allow JavaScript to execute.

This will also allow the file to open on other PC's without having to change Internet Explorer options.

链接:http://stackoverflow.com/questions/8146926/why-does-ie-restrict-the-javascript-files-of-local-html-pages


MOTW(Mark of the Web)是IE用以增强安全性的一个特性,MOTW允许IE强制运行在本地安全区内,前提是本地安全区的安全性限制要比本机安全性高。



没有更多推荐了,返回首页