for循环,不想运行

时间:2011-07-04 00:54:30

标签: javascript google-chrome-extension

我有这段代码:

<script type="text/javascript">
var url = "http://www.xxxxx.xxx/xxxxxxxxx";

var txt;
var id1;
var id2;
var imgarres = [];
var imgarr = [];
var imgels = [];

function getdata() {
    if (id1){clearTimeout(id1);}
    if (id2){clearTimeout(id2);}

    var xhr = new XMLHttpRequest();
    xhr.open('GET',url, true);
    xhr.setRequestHeader('Cache-Control', 'no-cache');
    xhr.setRequestHeader('Pragma', 'no-cache');

    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4)  {
            txt = xhr.responseText;

            var r = txt.indexOf('<b class="fl_r">Online</b>');
            var el = document.createElement("div");

            el.innerHTML = txt;

            var n = imgprocess(el);     
            var nam = el.getElementsByTagName("title")[0].innerHTML;

            if (r != -1) {
                var notification = webkitNotifications.createNotification('plus.gif',  nam, 'online!!' );
                notification.show();
                var id1 = setTimeout(getdata, 60000);
            } else {
                var notification = webkitNotifications.createNotification(n,  nam, 'offline!!' );
                notification.show();
                var id2 = setTimeout(getdata, 600000);
            }
        }
    }

    xhr.send();    
}

function imgprocess(text) {
    imgels = text.getElementsByTagName("IMG");
    for (var i=0;i< imgels.length;i++) {
        if (imgels[i].src.indexOf(parse(url)) != -1) {
            imgarr = imgels[i];
        }
    }

    for (var p=0; p< imgarr.length; p++) {
        if (imgarr[p].parentNode.nodeName=="A") {
            imgarres = imgarr[p];
        }
    }

    var z = imgarres[0].src;
    return z; 
}

function init() {
    getdata();
}
</script>
</head>
<body onload="init();">

当我执行此代码时,错误显示“src无法读取未定义”关于var z = imgarres[0].src;当我从该行中删除src时,扩展程序可以正常运行,但是 imgprocess例程不会返回预期值!期望值是imgurl,这是我删除的src。似乎第二个for循环(for (var p=0; p< imgarr.length; p++){)根本没有运行,但第一个是OK。我该如何解决这个问题?

P.S。:我试过像这样传递回调:xhr.onreadystatechange = function(imgprocess) { 但它不起作用。它说“未捕获的类型错误”对象不是一个功能。

1 个答案:

答案 0 :(得分:3)

 if (imgels[i].src.indexOf(parse(url)) != -1){
    imgarr = imgels[i];
 }

看起来你在上面的代码中用一个元素覆盖了一个数组。

添加了编辑:

如果if条件为真,imgels[i]是一个元素(带src),但不是将imgels [i]添加到imgarr数组,而是更改{{1指向单个元素。

然后在第二个for循环中,您将其视为一个数组。

实际上,这也是第二个循环中的一个错误。 imgarr应该是一个数组吗?如果是,那么imgarres是错误的(在你这样做之后它指向一个元素)。如果不是,那么imgarres = imgarr[p];是错误的(如果它是一个元素,则不需要var z = imgarres[0].src;)。

添加了编辑:

[0]

不会将元素添加到数组中!

somearray = someelement; 

一样。

添加了编辑:只需尝试此操作即可。谁知道,它可能有用......

somearray.push(someelement);