0

我很难缩小这个范围。
在 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的一部分。

关于如何解决这个问题的任何想法?

编辑我: 当我在 IE9 中打开调试器时,在该行放置断点,然后打开堆栈跟踪,这就是我所看到的:

在此处输入图像描述

所以我假设它是由 $(document).ready 触发的

编辑二 似乎 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;    
}
4

2 回答 2

2

给定的“错误”是误导性的 :) 有时如果你给 jquery 一些“不存在的元素”,它希望有一些元素,它只是胡说八道......请尝试在你的书面代码中的某个地方找到问题:做您有为 (document).ready() 注册的任何函数调用吗?每个 dom 节点都是真正的 dom 节点而不是空/未定义吗?

于 2013-02-08T23:21:14.907 回答
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>
于 2013-02-14T22:03:03.023 回答