Javascript 对于不希望运行的循环

Javascript 对于不希望运行的循环,javascript,google-chrome-extension,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){clearTimeou

我有以下代码:

<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();">

变量url=”http://www.xxxxx.xxx/xxxxxxxxx";
var-txt;
变量id1;
var id2;
var imgarres=[];
var imgarr=[];
var imgels=[];
函数getdata(){
if(id1){clearTimeout(id1);}
if(id2){clearTimeout(id2);}
var xhr=new XMLHttpRequest();
xhr.open('GET',url,true);
setRequestHeader('Cache-Control','no-Cache');
setRequestHeader('Pragma','no cache');
xhr.onreadystatechange=函数(){
if(xhr.readyState==4){
txt=xhr.responseText;
var r=txt.indexOf(“在线”);
var el=document.createElement(“div”);
el.innerHTML=txt;
var n=imgprocess(el);
var nam=el.getElementsByTagName(“title”)[0].innerHTML;
如果(r!=-1){
var notification=webkitNotifications.createNotification('plus.gif',nam',online!!');
notification.show();
var id1=设置超时(getdata,60000);
}否则{
var notification=webkitNotifications.createNotification(n,nam,'offline!!');
notification.show();
var id2=设置超时(getdata,600000);
}
}
}
xhr.send();
}
函数imgprocess(文本){
imgels=text.getElementsByTagName(“IMG”);
对于(变量i=0;i
当我执行这段代码时,错误是关于
var z=imgarres[0]的“src不能读取未定义的”当我从该行中删除
src
时,扩展可以正常工作,但是
imgprocess
例程未返回预期值!预期值是imgurl,它位于我删除的src中。第二个for循环(
for(var p=0;p
)似乎根本没有运行,但第一个就可以了。我该如何解决这个问题

注意:我试着像这样传递回调:
xhr.onreadystatechange=function(imgprocess){
但它不起作用,它说“UncaughtTypeError”对象不是函数

 if (imgels[i].src.indexOf(parse(url)) != -1){
    imgarr = imgels[i];
 }
在上面的代码中,您似乎正在用单个元素覆盖数组

新增编辑:

somearray = someelement; 
如果If条件为true,
imgels[i]
是一个元素(带有
src
),但不是将imgels[i]添加到
imgar
数组中,而是将
imgar
更改为指向单个元素

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

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

新增编辑:

somearray = someelement; 
不将元素添加到数组中

somearray.push(someelement);
是的

添加编辑:试试这个。谁知道呢,可能有用

function imgprocess(text){
 // get all IMG elements below the div
 imgels = text.getElementsByTagName("IMG");
 // filter them somehow
 imgarr = [];
 for (var i=0;i< imgels.length;i++){
   if (imgels[i].src.indexOf(parse(url)) != -1){
    imgarr.push(imgels[i]);
   }
 }

 // filter again, could probably be joined into one loop
 imgarres = [];
 for (var p=0; p< imgarr.length; p++){
   if (imgarr[p].parentNode.nodeName=="A"){
     imgarres.push(imgarr[p]);
   }
 }
 // return the first image's src if any
 if (imgarres.length > 0) {
   return imgarres[0].src;
 }
 return null;
}
函数imgprocess(文本){
//获取div下面的所有IMG元素
imgels=text.getElementsByTagName(“IMG”);
//以某种方式过滤它们
imgarr=[];
对于(变量i=0;i0){
返回imgarres[0].src;
}
返回null;
}
在上面的代码中,您似乎正在用单个元素覆盖数组

新增编辑:

somearray = someelement; 
如果If条件为true,
imgels[i]
是一个元素(带有
src
),但不是将imgels[i]添加到
imgar
数组中,而是将
imgar
更改为指向单个元素

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

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

新增编辑:

somearray = someelement; 
不将元素添加到数组中

somearray.push(someelement);
是的

添加编辑:试试这个。谁知道呢,可能有用

function imgprocess(text){
 // get all IMG elements below the div
 imgels = text.getElementsByTagName("IMG");
 // filter them somehow
 imgarr = [];
 for (var i=0;i< imgels.length;i++){
   if (imgels[i].src.indexOf(parse(url)) != -1){
    imgarr.push(imgels[i]);
   }
 }

 // filter again, could probably be joined into one loop
 imgarres = [];
 for (var p=0; p< imgarr.length; p++){
   if (imgarr[p].parentNode.nodeName=="A"){
     imgarres.push(imgarr[p]);
   }
 }
 // return the first image's src if any
 if (imgarres.length > 0) {
   return imgarres[0].src;
 }
 return null;
}
函数imgprocess(文本){
//获取div下面的所有IMG元素
imgels=text.getElementsByTagName(“IMG”);
//以某种方式过滤它们
imgarr=[];
对于(变量i=0;i0){
返回imgarres[0].src;
}
返回null;
}

你的意思是什么?我先用console.log(imgarr)检查了for循环;第一个for循环很好。我添加了一些解释并解释了为什么第二个循环是错误的。然后console.log(imgarr)为什么输出我需要的img元素??imgarres是数组。我想在其中放入过滤元素。从imgarr数组过滤。你的console.log(imgarr),它是输出您需要的“img元素”还是输出您需要的“img元素”?试试console.log(imgarr.length),它输出了什么吗?什么意思?我首先用console.log(imgarr)检查了循环;第一个for循环很好。我添加了一些解释