JavaScript中的对象同时定义和未定义(在FireFox扩展中)

Ale*_*nov 16 javascript firefox-addon

我正在追逐FireFox扩展中的一个错误.我终于设法自己看了(我以前只有报告),我无法理解我所看到的是可能的.

错误控制台中我的扩展程序中的一条错误消息是"未定义gBrowser".这本身就足够令人惊讶了,因为叠加层是在browser.xul和navigator.xul之上,我希望gBrowser两者都可以使用.更糟糕的是它发生的实际位置:nextplease.js的第101 .也就是说,在函数内部isTopLevelDocument,只调用from onContentLoaded,只从onLoad这里调用:

gBrowser.addEventListener(this.loadType, function (event) {
    nextplease.loadListener.onContentLoaded(event);
},
true);
Run Code Online (Sandbox Code Playgroud)

所以gBrowser定义了onLoad,但在某种程度上未定义isTopLevelDocument.

当我试图实际使用扩展时,我得到另一个错误:"未定义nextplease".有趣的是它发生在853和857行.也就是说,函数内部

nextplease.getNextLink = function () {
    nextplease.getLink(window.content, nextplease.NextPhrasesMap, nextplease.NextImagesMap, nextplease.isNextRegExp, nextplease.NEXT_SEARCH_TYPE);
}

nextplease.getPrevLink = function () {
    nextplease.getLink(window.content, nextplease.PrevPhrasesMap, nextplease.PrevImagesMap, nextplease.isPrevRegExp, nextplease.PREV_SEARCH_TYPE);
}
Run Code Online (Sandbox Code Playgroud)

因此nextplease以某种方式定义足以调用这些函数,但未在其中定义.

最后,typeof(nextplease)在Execute JS中执行返回"object".同样的gBrowser.

怎么会发生这种情况?有任何想法吗?

Mr.*_* 安宇 2

对于第二种情况:

nextplease.getNextLink = function () {
    nextplease.getLink(window.content, nextplease.NextPhrasesMap, nextplease.NextImagesMap, nextplease.isNextRegExp, nextplease.NEXT_SEARCH_TYPE);
}

nextplease.getPrevLink = function () {
    nextplease.getLink(window.content, nextplease.PrevPhrasesMap, nextplease.PrevImagesMap, nextplease.isPrevRegExp, nextplease.PREV_SEARCH_TYPE);
}
Run Code Online (Sandbox Code Playgroud)

我会尝试这个:

nextplease.getNextLink = function () {
    this.getLink(window.content, this.NextPhrasesMap, this.NextImagesMap, this.isNextRegExp, this.NEXT_SEARCH_TYPE);
}

nextplease.getPrevLink = function () {
    this.getLink(window.content, this.PrevPhrasesMap, this.PrevImagesMap, this.isPrevRegExp, this.PREV_SEARCH_TYPE);
}
Run Code Online (Sandbox Code Playgroud)