用于webbrowser控件中的跨域XMLHTTP请求的IInternetSecurityManager URLACTION_CROSS_DOMAIN_DATA和异步可插入协议

Joh*_*haw 8 .net c# vb.net xmlhttprequest webbrowser-control

我使用C#在.net 2.0应用程序中实现了异步可插拔协议,它将存储在本地机器上的html文件加载到MemoryStream中.

当我使用本地文件路径在webbrowser控件中正常加载html文件时,xmlhttprequest工作正常但通过协议加载文件并尝试使用xmlhttprequest返回拒绝访问错误.

我认为这种行为是由于webbrowser控件不再知道html文件存储在本地计算机上,并将它们加载到不受信任的Internet区域.

即使我在IInternetSecurityManager的ProcessUrlAction中为URLACTION_CROSS_DOMAIN_DATA返回S_OK,我用断点检查它以确保它被触发,我的IInternetSecurityManager的返回值被忽略.

我已经尝试将pdwZone设置为IInternetSecurityManager的MapUrlToZone中的tagURLZONE.URLZONE_LOCAL_MACHINE以获取我的协议URL,并使用GetSecurityId稍微玩了一下,虽然我不确定我正在做什么并打破其他事情,如允许脚本加载等...似乎没有什么能够允许跨域xmlhttprequest.

任何人都知道如何让这个工作.

nos*_*tio 4

这并不是真正的答案,但它可能有助于隔离问题。我首先用 C++ 实现这个 APP 处理程序,并使用一些强大的非托管 WebBrowser ActiveX 主机示例对其进行测试,例如 Lician Wishick 的 Webform:

http://www.wischik.com/lu/programmer/webform.html

如果我能让它在非托管主机上可靠地工作,我会继续使用 C# 实现。

我还尝试设置FEATURE_BROWSER_EMULATION8000或更少,以强制模拟旧版 IE 行为,只是为了检查它是否能以这种方式工作。

也就是说,我不会抱太大希望。我过去已经完成了WebBrowser/MSHTML 集成的工作,我有一种感觉,自 IE9 以来,APP 支持就没有经过回归测试,有利于旨在拥抱开放 Web 标准的新 IE 内容。

更新后,MSDN 含糊地提到了这一点

成功完成后,pbSecurityId 包含方案、域和区域信息,以及指定的 pwszUrl 是否源自 Web 标记。

这是很久以前对我有用的格式(也许早在“网络标记”被引入之前):

static const char security[] = "https:www.mysite.com\2\0\0"; // C++ puts the termination \0 for us
Run Code Online (Sandbox Code Playgroud)

我相信,2这里代表“受信任的站点”区域。其他区域可以在这里找到:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Lockdown_Zones

希望这可以帮助。