IE11 在处理 SVG 时抛出 'Member not found' 错误

IE11 Throws 'Member not found' Error when handling SVG

我目前正在修复一些因从 IE8 升级到 IE11 而出现的错误。发生错误的函数尝试设置变量以引用 SVG 文档。然后将名称分配给 SVG 中的元素属性。此代码在 IE8 中正常工作,但在 IE11 中不再工作。

我在启用了企业模式的 IE11 中工作。

文档模式:5
浏览器配置文件:企业
用户代理字符串:默认值

错误: SCRIPT3:找不到成员。

抛出错误的行:

var svgDoc = document.embeds(0).getSVGDocument();

函数有错误:

function addMouseHandlers()
{
    var svgDoc = document.embeds(0).getSVGDocument();
    //var svgDoc = document.embeds(0).contentDocument();

    var rgrElements = svgDoc.getElementsByTagName("rgr:ranger");
    //document.all.results.innerHTML = rgrElements.length + " rgr:ranger nodes found.";

    //var childNodeList = rgrElements.item(0).getChildNodes();
    var gParent = null;
    var idx = 0;
    var sub = "";
    var point = "";
    for (idx = 0; idx < rgrElements.length; idx++) {
        sub = "";
        point = "";

        gParent = rgrElements.item(idx).parentNode();
        if (rgrElements.item(idx).hasAttribute("substation")) {
            sub = rgrElements.item(idx).getAttribute("substation");
        }
        if (rgrElements.item(idx).hasAttribute("point")) {
            point = rgrElements.item(idx).getAttribute("point");
        }
        gParent.setAttribute('onmouseover', 'showPointInfo(\"' + sub + '\", \"' + point + '\")');
        //gParent.setAttribute('onmouseout', 'showPointInfo(\"\", \"\")');
    }
}

addMouseHandlers() 调用自:

function bodyLoaded()
{
    var scriptToRun;
    scriptToRun = "closeWaiter3 \"pic\"";
    //document.parentWindow.parent.execScript(scriptToRun, "VBScript");
    addMouseHandlers();
}

//bodyLoaded() called onload
<BODY BGCOLOR=BLACK onload="bodyLoaded()">

我查看了几个相关的 posts,但无法将解决方案应用于我的问题。 post: Member not found IE error (IE 6, 7, 8, 9) 解释这是一个问题,因为如果该函数调用在 setTimeout 内,IE 不会将事件传递给另一个函数。但是,此函数的调用堆栈不包含对 'setTimeout' 的任何引用。我还尝试使用 'contentDocument' 属性 引用 SVG 文档但没有成功。

我认为这可能与使用 'onload' 调用初始函数的方式有关,但我无法在调试时发现需要更改的内容。

问:有人能指导我如何调试这个问题并找到问题的根源吗?

编辑:SVG 嵌入标签设置如下:

<embed src="<%=strPic%>" name="SVGEmbed" WIDTH="1024px" HEIGHT="647px"/>

我是否试图错误地引用 SVG 文档?

原来 svg doc 对象没有在 getSVGDocument() 调用时及时初始化。为 addMouseHandlers() 函数调用添加 setTimeout 可缓​​解此问题。

function bodyLoaded()
{
    var scriptToRun;
    scriptToRun = "closeWaiter3 \"pic\"";
    //addMouseHandlers();
    //Added the settimeout so, svg gets some time to initialize
    setTimeout('addMouseHandlers()', 1000);
}

不确定 IE8 和 IE11 之间的差异会导致此问题。对 IE 有更多了解的人能否解释为什么会发生这种情况?