c# - IInternetSecurityManager URLACTION_CROSS_DOMAIN_DATA 和用于 Web 浏览器控件中跨域 XMLHTTP 请求的异步可插入协议(protocol)

标签 c# .net vb.net xmlhttprequest webbrowser-control

我已经使用 C# 在 .net 2.0 应用程序中实现了异步可插入协议(protocol),它将存储在本地计算机上的 html 文件加载到 MemoryStream 中。

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

我推测此行为是由于 webbrowser 控件不再知道 html 文件存储在本地计算机上,并将它们加载到不受信任的 internet 区域。

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

我已经尝试在 IInternetSecurityManager 的 MapUrlToZone 中将 pdwZone 设置为 tagURLZONE.URLZONE_LOCAL_MACHINE 用于我的协议(protocol) URL,并使用 GetSecurityId 进行了一些尝试,尽管我不确定我在做什么并破坏了其他事情,例如允许脚本加载等...似乎没有什么可以允许跨域 xmlhttprequest。

任何人都知道我如何让它工作。

最佳答案

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

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

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

我也会尝试设置 FEATURE_BROWSER_EMULATION8000 或更少,以模拟遗留 IE 行为,只是为了检查它是否以这种方式工作。

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

已更新,MSDN 含糊地提到 this :

Upon successful completion, pbSecurityId contains the scheme, domain, and zone information, as well as whether the specified pwszUrl was derived from a Mark of the Web.

这是很久以前对我有用的格式(也许在 "Mark of the Web" 被引入之前):

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

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

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

希望这对您有所帮助。

关于c# - IInternetSecurityManager URLACTION_CROSS_DOMAIN_DATA 和用于 Web 浏览器控件中跨域 XMLHTTP 请求的异步可插入协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22465397/

相关文章:

c# - Mac 上 Mono 中的 DllImport 出现 DllNotFoundException

.net - 使用 `dotnet build` 或 `dotnet publish` 时如何为引用的项目指定构建配置?

vb.net - 如何获得需要托管服务的测试的代码覆盖率?

vb.net - 如何在 VB.NET 中使用 Outlook.MailItem 获取发件人电子邮件地址?

vb.net - MurmurHash3 测试向量

c# - ExpandoObject 的动态 LINQ 查询?

C# 表单对于 2D 游戏来说太慢了吗?

c# - 在列表中查找两个(或更多)属性的最大值

c# - 如何修复数学函数

c# - 如何使用 ManagementEventWatcher 来跟踪暂停/恢复?