1

このコードには奇妙な問題があります。基本的に、新しい ActiveXObject ("InternetExplorer.Application") をロードし、それへの参照を IE ウィンドウ オブジェクトに配置しています。次に、HTML ファイルを読み込み、読み込みが完了するのを待ってから、新しいウィンドウに対してスクリプトを実行します。VS2010 経由でデバッグ (F5 または CTRL-F5) の有無にかかわらず IE を起動すると、このコードが機能し、lDebugWindow.document.documentElement オブジェクトへの参照が取得されます。

問題 -- しかし、IE を WIN7 タスクバーから起動すると、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 に答える