【问题标题】:Accessing a frame name results on an "Access is denied" exception访问框架名称会导致“访问被拒绝”异常
【发布时间】:2011-08-09 20:56:08
【问题描述】:

我正在为 IE 制作 C# 工具栏,我需要访问网站中的某个框架。在我最初的测试中,我只是试图循环浏览框架并弹出一个带有框架名称的 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");

}

通过我在网络上的搜索,我发现这实际上不是错误。预计它会以这种方式表现。我的问题是:做我想做的事情的正确方法是什么?

提前致谢!

【问题讨论】:

标签: c# .net browser mshtml


【解决方案1】:

您收到此消息可能是因为您正试图从另一个域访问框架。 same origin policy 阻止你这样做。要使其正常工作,请使用 IServiceProvider。

IServiceProvider isp = (IServiceProvider) currentFrame;

然后使用QueryService查询得到IWebBrowser2对象。

确保你使用System.Runtime.InteropServices

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 2014-11-19
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2012-07-10
    相关资源
    最近更新 更多