访问框架名的结果是“访问被拒绝”;例外

本文关键字:访问 访问被拒绝 例外 拒绝 框架 结果是 | 更新日期: 2023-09-27 17:50:38

我正在为IE制作c#工具栏,我需要访问网站内的某个框架。在最初的测试中,我只是尝试遍历框架,并弹出一个带有框架名称的MessageBox。但每当我尝试这样做时,我都会遇到一个异常,说"访问被拒绝"。异常的全文是:

访问被拒绝。(Exception from 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");
}

从我在网上的搜索,我发现这实际上不是一个bug。它应该是这样的。我的问题是:做我想做的事情的正确方法是什么?

提前感谢!

访问框架名的结果是“访问被拒绝”;例外

可能是因为您正在尝试从另一个域访问帧而收到此消息。同源策略阻止您这样做。要使其工作,请使用IServiceProvider。

IServiceProvider isp = (IServiceProvider) currentFrame;

然后使用QueryService查询IWebBrowser2对象。

确保使用System.Runtime.InteropServices