访问帧名称会导致“访问被拒绝”异常

时间:2011-04-20 21:49:31

标签: c# .net browser mshtml

我在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");

}

从我在网上的搜索中,我发现这实际上并不是一个错误。预计会有这样的表现。我的问题是:做我正在做的事情的正确方法是什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

可能是因为您尝试从其他域访问某个帧而收到此消息。 same origin policy阻止你这样做。为了使其工作,请使用IServiceProvider。

IServiceProvider isp = (IServiceProvider) currentFrame;

然后使用QueryService进行查询以获取IWebBrowser2对象。

确保使用System.Runtime.InteropServices