IE11投掷'未找到成员'处理SVG时出错

IE11 Throws 'Member not found' Error when handling SVG

本文关键字:处理 SVG 出错 成员 投掷 IE11      更新时间:2023-09-26

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

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

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

错误:SCRIPT3:找不到成员。

引发错误的行:

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

函数w/error:

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()">

我看了几个相关的帖子,但都没能把解决方案应用到我的问题上。这篇文章: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有更深入了解的人能够解释为什么会发生这种情况吗?