我在C#上为IE做了一个工具栏,我需要访问网站中的某个框架。在我的初始测试中,我只是尝试循环遍历框架并使用带有框架名称的MessageBox弹出窗口。但每当我尝试这样做时,我都会遇到异常,说“访问被拒绝”。例外的全文是:
访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))
以下是代码:
IHTMLSelectionObject currentSelection = myHTMLDocument.selection;
IHTMLFramesCollection2 frames = (IHTMLFramesCollection2)myHTMLDocument.frames;
for (int i = 0; i < frames.length; i++)
{
object refIndex = i;
IHTMLWindow2 currentFrame = (IHTMLWindow2)frames.item(ref refIndex);
if (currentFrame != null)
{
MessageBox.Show(currentFrame.name);
}
else
MessageBox.Show("Null");
}
从我在网上的搜索中,我发现这实际上并不是一个错误。预计会有这样的表现。我的问题是:做我正在做的事情的正确方法是什么?
提前致谢!
答案 0 :(得分:0)
可能是因为您尝试从其他域访问某个帧而收到此消息。 same origin policy阻止你这样做。为了使其工作,请使用IServiceProvider。
IServiceProvider isp = (IServiceProvider) currentFrame;
然后使用QueryService
进行查询以获取IWebBrowser2对象。
确保使用System.Runtime.InteropServices