Фрагмент кода работает, когда процедурный, но не при преобразовании в модульный - PullRequest
1 голос
/ 12 марта 2010
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);

Модульный код предупреждает содержимое поиска, но не предупреждает parsedHTML. Зачем? Как решить?

ОБНОВЛЕНИЕ:

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
    }
}

Звонок даже не делается.

UPDATE:

Консоль ошибок говорит об этом. HTMLParser не является функцией

Ответы [ 2 ]

0 голосов
/ 12 марта 2010

Проблема в том, что this не одно и то же в определении функции и когда она вызывается. Когда определено HTMLParser, это объект SiteCompare, когда вызывается this.HTMLParser(searchContents), this, вероятно, объект окна. Таким образом, ошибка, которую вы получаете, означает, что window.HTMLParser не является функцией.

Чтобы исправить это, вам нужно определить ваш метод HTMLParser вне объекта SiteCompare или (возможно, лучше) использовать объект SiteCompare для вызова HTMLParser. Пример:

var parser = new SiteCompare();
parsedHTML = parser.HTMLParser(searchcontents); 
0 голосов
/ 12 марта 2010

Ваша логика вызова выполняется в той же области действия, что и определение this.HTMLParser?

Попробуйте поместить в HTMLParser оператор оповещения и посмотреть, будет ли вообще выполнен вызов. Звучит так, как будто выдает исключение и покидает ваш скрипт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...