SHDocVw / mshtml InternetExplorer iframe访问被拒绝

问题描述

我需要向打开的页面及其iframe中注入一些脚本。应该在开始时进行,并且每次用户导航到下一页时。 我的init注入没有问题,我这样做是这样的:

public static void InstallScripts(InternetExplorer internetExplorer,string contentScript)
{
    var scriptCode = ...

    IHTMLDocument2 document = internetExplorer.Document;
    ExecuteScript(document,scriptCode);
    ExecuteScript(document,"wgxpath.install();");
    IHTMLDocument3 document3 = (IHTMLDocument3)document;
    var iFrames = document3.getElementsByTagName("iframe");
    var hTMLIFrames =
            iFrames.OfType<IHTMLElement>().Select(x => (HTMLIFrame)x);

    foreach (HTMLIFrame iframe in hTMLIFrames)
    {
        try
        {
            var dd = iframe.src;
            var ss = iframe.readyState;
            ExecuteScript(iframe.contentwindow.document,scriptCode);
            ExecuteScript(iframe.contentwindow.document,"wgxpath.install();");
        }
        catch { }
    }

    InjectScript(internetExplorer,contentScript);
}
...
private static void ExecuteScript(IHTMLDocument2 document,string script)
{
    
    var scriptExecutor = (IScriptExecutor)document;

    scriptExecutor.Script(out object scriptObj);

    try
    {
        scriptObj.GetType().InvokeMember("eval",BindingFlags.InvokeMethod,null,scriptObj,new object[] { script });
    }
    catch { }
    
}

问题出在导航之后。 当我尝试访问contentwindow中的文档时,我刷新了页面,并且一些iframe抛出了Access Denide。 这是我的活动代码

internetExplorer.DocumentComplete += (object pdisp,ref object url) =>
{
    var ieInstance = (InternetExplorer)pdisp;
    if (ieInstance.ReadyState == tagREADYSTATE.READYSTATE_COMPLETE)
    {
        if (ieInstance.LocationURL != "about:blank" && ieInstance.LocationURL == (string)url)
        {
            InstallScripts(ieInstance,contentScript);
        }
    }
};

为什么在打开页面后可以访问iframe的文档,为什么不能在DocumentComplete之后访问它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)