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

时间:2014-03-17 21:06:41

标签: c# .net 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。

任何人都知道如何让它发挥作用。

2 个答案:

答案 0 :(得分:4)

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

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

如果我能够使用非托管主机可靠地运行它,我将继续进行C#实现。

我还尝试将FEATURE_BROWSER_EMULATION设置为8000或更少,以强制模拟旧版IE行为,只是为了检查它是否有效。

那就是说,我不会高涨。我过去曾做过my share of WebBrowser/MSHTML integration,我觉得APP支持自IE9以来一直没有经过回归测试,支持新的IE浏览器,旨在接受开放的网络标准。< / p>

已更新,MSDN含糊地提及this

  

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

这里的格式很久以前对我很有用(或许,在引入"Mark of the Web"之前的方式):

static const char security[] = "https:www.mysite.com\2\0\0"; // C++ puts the termination \0 for us

我相信,2代表&#34;可信网站&#34;区。其他区域可以在这里找到:

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

希望这有帮助。

答案 1 :(得分:1)

也许我错了,但您是否尝试过发送协议标题Access-Control-Allow-Origin: *