代码片段在程序时起作用,但在转换为模块化时不起作用

时间:2010-03-12 18:39:01

标签: javascript firefox

function sc_HTMLParser(aHTMLString){
    var parseDOM = content.document.createElement('div');
    parseDOM.appendChild(Components.classes['@mozilla.org/feed-unescapehtml;1']
        .getService(Components.interfaces.nsIScriptableUnescapeHTML)
        .parseFragment(aHTMLString, false, null, parseDOM));
    return parseDOM;
}

变为

this.HTMLParser = function(aHTMLString){
    var parseDOM = content.document.createElement('div');
    parseDOM.appendChild(Components.classes['@mozilla.org/feed-unescapehtml;1']
        .getService(Components.interfaces.nsIScriptableUnescapeHTML)
        .parseFragment(aHTMLString, false, null, parseDOM));
    return parseDOM;
}

searchcontents = req.responseText;
parsedHTML = sc_HTMLParser(searchcontents);
sitefound = sc_sitefound(compareuris, parsedHTML);

变为

searchcontents = req.responseText;
alert(searchcontents);
parsedHTML = this.HTMLParser(searchcontents);
alert(parsedHTML);
sitefound = this.sitefound(compareuris, parsedHTML);

模块化代码会警告搜索内容,但不会警告解析的HTML。为什么?怎么解决?

更新:

j0rd4n,它是:

function SiteCompare() {
    this.finishSiteCompare = function(downloaduris, compareuris, tryinguri) {
        // code
        searchcontents = req.responseText;
        alert(searchcontents);
        parsedHTML = this.HTMLParser(searchcontents);
        alert(parsedHTML);
        sitefound = this.sitefound(compareuris, parsedHTML);
        // code
    }
    this.HTMLParser = function(aHTMLString) {
        //code
    }
}

甚至没有打电话。

更新:

错误控制台说this.HTMLParser不是函数

2 个答案:

答案 0 :(得分:0)

你的调用逻辑是否在与this.HTMLParser定义相同的函数范围内执行?

尝试在HTMLParser中放置一个警告声明,看看是否进行了调用。这听起来像是抛出异常并离开你的剧本。

答案 1 :(得分:0)

问题是this在函数定义中和调用它时不同。定义HTMLParser时,这是SiteCompare对象,当调用this.HTMLParser(searchContents)时,this可能是窗口对象。因此,您获得的错误意味着window.HTMLParser不是函数。

要解决此问题,您需要在HTMLParser对象之外定义SiteCompare方法,或者(可能更好)使用SiteCompare对象来调用HTMLParser。例如:

var parser = new SiteCompare();
parsedHTML = parser.HTMLParser(searchcontents);