1

我对这段代码有一个奇怪的问题。基本上我正在加载一个新的 ActiveXObject(“InternetExplorer.Application”)并将它的引用放到 IE 窗口对象上。然后我加载一个 HTML 文件并等待它完成加载,然后再尝试针对新窗口运行脚本。当我通过带有或不带有调试(即 F5 或 CTRL-F5)的 VS2010 启动 IE 时,此代码有效,并且我获得了对 lDebugWindow.document.documentElement 对象的引用。

问题——但是当我刚刚从 WIN7 任务栏启动 IE 时,lDebugWindow.document 总是未定义。任何想法从 VS2010 与任务栏启动时 IE 有什么不同?这是突出显示的行的代码,其行为与 VS2010 与 IE 的任务栏启动不同:

function wfDebugXml(pNode)
{
    window.lDebugWindow = new ActiveXObject("InternetExplorer.Application");
    lDebugWindow.navigate(sFrameworkBase + "/GlobalDebugger/Debug.htm");

    lReady = false;

    for (var i = 0; i < 40; i++)
    {
        if (!lReady)
        {
            try
            {
                lDebugWindow.onreadystatechange = wfDebugRenderXml(pNode);
            }
            catch (e) { };
        }
    }
}

function wfDebugRenderXml(pNode)
{
    // THE NEXT LINE IS THE ONE THAT HAS THE PROBLEM
    var lDocumentElement = lDebugWindow.document.documentElement;

    var lXsltDoc = Sarissa.getDomDocument();
    lXsltDoc.async = false;
    lXsltDoc.load("GlobalDebugger/Debug.xsl");

    var lXslt = new XSLTProcessor();
    lXslt.importStylesheet(lXsltDoc);

    var lXmlDoc = Sarissa.getDomDocument();
    lXmlDoc.loadXML(pNode.xml);

    var lXmlOutput = lXslt.transformToFragment(lXmlDoc, lDebugWindow.document);

    while (lDocumentElement.childNodes.length > 0)
    {
        lDocumentElement.removeChild(lDocumentElement.lastChild);
    }

    lDocumentElement.appendChild(lXmlOutput);
    lDebugWindow.Visible = true;

}
4

1 回答 1

0

我想你的问题现在已经消失了。对于其他人来说,这可能是一个权限问题:在 Win7 下,IE 在低完整性进程中运行。我想可能无法在具有不同完整性级别的进程之间获取 COM 指针。

我使用 ChangeWindowMessageFilter 来解决我的问题,但我是通过消息进行通信的。不过,开始谷歌搜索可能是个好主意。

于 2013-02-26T10:09:39.410 回答