我目前正在努力修复由于从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文档?
答案 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有更多了解的人能够解释为什么会这样吗?