このコードには奇妙な問題があります。基本的に、新しい 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;
}