我无法缩小这个范围 在IE8及以上版本中工作正常 我甚至不知道如何调试它,因为IE7没有开发人员工具。
错误表示第6256行(首先在下面的摘录中); char 6('if'字母'i');代码0:
if ( typeof elem.getElementsByTagName !== "undefined" ) { /***this is the line that throws Invalid Argument***/
// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
// Splice the scripts into ret after their former ancestor and advance our index beyond them
ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
i += jsTags.length;
}
代码是函数 clean 的一部分。
关于如何解决这个问题的任何想法?
编辑I: 当我在IE9中打开调试器时,在该行上放置断点然后打开堆栈跟踪这就是我所看到的:
所以我认为它是由$(document).ready
触发的编辑II 似乎jsfiddle目前正在关闭所以我在这里发布代码并创建jsbin片段:
http://jsbin.com/avajuw/1/edit
HTML:
<div id="navigation-block" style="width: 154px; height: 100%;">
<ul id="sliding-navigation">
<li class="sliding-element">
<h4>Docs</h4>
</li>
</ul>
</div>
JS:
$(document).ready(function () {
// the actual code I run is in comments
// var baseRestUrl = top.location.protocol + '//' + top.location.host + top.location.pathname + 'jaxrs';
var baseRestUrl = 'http//host:port/archive/jaxrs';
var linksRestUrl = baseRestUrl + '/links';
var fileRestUrl = baseRestUrl + '/file';
// var params = top.location.search;
var params = 'pnd=231352122&pgv=654321321321';
// $.getJSON(linksUrl, function(json) { //to get something like:
var json = {
"links": {
"lista": [{
"clipExt": "pnd",
"docId": "1203200110003774",
"imageDesc": "Front b/w",
"imageName": "Img_f_bw"
}, {
"clipExt": "pgv",
"docId": "1203200110003774",
"imageDesc": "Front gray",
"imageName": "Img_f_gr"
}]
}
};
//var lista = (!json.links.lista[1]) ? json.links : json.links.lista;
//alert(lista);
$.each(json.links.lista, function(i, item) {
var clipExt = item.clipExt;
var fileLink = fileRestUrl + '?' +
'un=' + item.docId + '&' +
'ext=' + clipExt + '&' + clipExt + '=' + extractParam(params, clipExt);
$('#sliding-navigation').append(
"<li class=\"sliding-element\"><a href=\"#\" onclick=\"fetchImage('" + fileLink + "', this)\">" + item.imageDesc + "</a></li>");
});
});
function extractParam(url, paramName) {
var tmp = (url.match(RegExp("[?|&]" + paramName + '=(.+?)(&|$)')) || [null])[1];
return tmp;
}
答案 0 :(得分:2)
给定的“错误”是错误的:)有时如果你给jquery一些“不存在的元素”,它希望有一些元素,它只是无意义...请尝试在你的书面找到问题代码:你有注册的任何函数调用(document).ready()吗?每个dom节点都是真正的dom节点而不是null / undefined吗?
答案 1 :(得分:1)
当IE7模式打开时,此html在IE9中工作,而jafiddle中的示例在相同模式下中断。它与您发布的代码相同,但放在本地文件中。所以问题必须在其他地方。
使用此标记创建html文件(与您的示例相同)并在IE7中打开。它有效吗?
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
</head>
<body>
<div id="navigation-block" style="width: 154px; height: 100%;">
<ul id="sliding-navigation">
<li class="sliding-element">
<h4>Dokumenti</h4>
</li>
</ul>
</div>
<script>
$(document).ready(function () {
// the actual code I run is in comments
// var baseRestUrl = top.location.protocol + '//' + top.location.host + top.location.pathname + 'jaxrs';
var baseRestUrl = 'http//host:port/archive/jaxrs';
var linksRestUrl = baseRestUrl + '/links';
var fileRestUrl = baseRestUrl + '/file';
// var params = top.location.search;
var params = 'pnd=231352122&pgv=654321321321';
// $.getJSON(linksUrl, function(json) { //to get something like:
var json = {
"links": {
"lista": [{
"clipExt": "pnd",
"docId": "1203200110003774",
"imageDesc": "Front b/w",
"imageName": "Img_f_bw"
}, {
"clipExt": "pgv",
"docId": "1203200110003774",
"imageDesc": "Front gray",
"imageName": "Img_f_gr"
}]
}
};
//var lista = (!json.links.lista[1]) ? json.links : json.links.lista;
//alert(lista);
$.each(json.links.lista, function(i, item) {
var clipExt = item.clipExt;
var fileLink = fileRestUrl + '?' +
'un=' + item.docId + '&' +
'ext=' + clipExt + '&' + clipExt + '=' + extractParam(params, clipExt);
$('#sliding-navigation').append(
"<li class=\"sliding-element\"><a href=\"#\" onclick=\"fetchImage('" + fileLink + "', this)\">" + item.imageDesc + "</a></li>");
});
});
function extractParam(url, paramName) {
var tmp = (url.match(RegExp("[?|&]" + paramName + '=(.+?)(&|$)')) || [null])[1];
return tmp;
}
</script>
</body>
</html>