Javascript:为什么这个JS会停止?

时间:2011-08-27 19:09:48

标签: javascript firefox-addon

这是一个Firefox插件,它有点令人费解,因为在某一点之后没有代码被执行。

if (self.xmlDoc == null) return false;


    var domain_and_full_destination=processing_domain.split("  ");

    if(domain_and_full_destination[0]=="xxx.org")
    {
        //window.stop(); // Totally stop the page from loading.

        self.root_node = '';
        self.root_node = self.xmlDoc.getElementsByTagName('joe_biden_is_a_moron');
        var destinations_array= new Array();

        for (var cci = 0; cci <= self.root_node.length; cci++)
        {
            self.second_node = '';
            self.second_node = self.root_node[cci];
            destinations_array[cci]=self.second_node.getElementsByTagName('riaum')[0].firstChild.nodeValue;
        }


alert(domain_and_full_destination[0]+"\n");

if继续,但我缩短了,因为我想知道为什么警报永远不会被调用?

调用for循环中的警报会被调用,但for循环之后的任何内容都不会执行。

Firefox错误控制台中也没有错误。

4 个答案:

答案 0 :(得分:1)

缺少if语句的近括号......?

Ivo Stoykov

答案 1 :(得分:1)

你提到调用for循环,但是你可以在循环结束之前发出警报,看它是否迭代/退出循环。

如果您是初学者并且不知道如何使用调试工具,则放置警报可以帮助您进行调试。但是从长远来看,您可能希望使用这些工具来帮助您更快地完成工作。

答案 2 :(得分:1)

你确定它没有投掷吗?你在那里做错了什么。

for (var cci = 0; cci <= self.root_node.length; cci++)

应该是

for (var cci = 0; cci < self.root_node.length; cci++)

你使用<=的事实意味着,在循环的最后一次迭代中,self.second_node实际上设置为undefined,这会使self.second_node.getElementsByTagName('riaum')抛出异常。

答案 3 :(得分:0)

尝试将此行划分为少数变量

destinations_array[cci]=self.second_node.getElementsByTagName('riaum')[0].firstChild.nodeValue;

var riaum = self.second_node.getElementsByTagName('riaum')[0] || null;
var child = riaum.firstChild || '';
var nodeVal = child.nodeValue || '?';
destinations_array[cci]=nodeVal;

你必须添加检查中的内容......

HTH

Iva Stoykova