【发布时间】:2011-04-26 19:36:41
【问题描述】:
我有 TWebBrowser 组件(Delphi 7),我从内存流中加载了 HTML。页面的 HTML 代码加载正常,页面显示正确。但是,当我尝试单击任何带有地址(href 属性值)的超链接时,例如“file:///C:/dir/page.html”,什么都没有发生。没有错误消息,浏览器也不会尝试转到另一个页面。 URL 是 100% 正确的 - 当我将同一个网页加载到同一个 TWebBrowser 实例,但是从硬盘驱动器上的文件,而不是从内存流中,这个链接工作正常。 有什么想法可能是错的吗?
我尝试执行以下语句:
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_INTRANET, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_TRUSTED, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_INTERNET, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_UNTRUSTED, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_LOCAL_MACHINE, 'about:blank', SZM_DELETE));
OleCheck(WebBrowser.SecurityManager.SetZoneMapping(URLZONE_LOCAL_MACHINE, 'about:blank', SZM_CREATE));
,但它们没有改变任何东西(它们被正确执行,没有错误,即 HRESULT = S_OK 一直)。我必须说该组件实际上是 TEmbeddedWB(它具有 SecurityManager 属性),尽管 TWebBrowser 的行为方式相同 - 我只是重新检查了它。
我考虑使用临时目录中的文件。
感谢大家,我终于通过使用临时目录中的文件解决了这个问题。
【问题讨论】:
-
您是否尝试将
file:///链接替换为普通的http://链接? -
我刚试过。带有“http://”协议的链接确实有效。带有“file://”的链接没有。
-
点击“file:///”链接时似乎没有任何反应。我检查了我定义的所有事件处理程序,但没有一个被调用。
-
所以它可能是被禁止的。正如MS在这里所说的msdn.microsoft.com/en-us/library/aa767731%28v=vs.85%29.aspx
Internet Explorer 6 Service Pack 1 (SP1) no longer allows browsing a local machine from the Internet zone,也许您的内存流将IE视为“Internet区域”中的站点。 -
@daemon_x, @GreyWolf:是的,我怀疑本地文件的安全设置。不知道能不能改。
标签: delphi internet-explorer delphi-7 twebbrowser