IE11在处理SVG时引发“未找到成员”错误

时间:2015-11-05 22:03:28

标签: javascript internet-explorer svg asp-classic internet-explorer-8

我目前正在努力修复由于从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()">

我看过几个相关的帖子,但未能将解决方案应用于我的问题。这篇文章: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文档?

1 个答案:

答案 0 :(得分:0)

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

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

不确定导致此问题的IE8和IE11之间的差异。对IE有更多了解的人能够解释为什么会这样吗?