我使用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。
任何人都知道如何让它发挥作用。
答案 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: *
?