파이어 폭스의 검색 엔진에서 관찰자를 추가하는 데 문제가 있습니다. 나는 Mozilla Developer Site에있는 nsIBrowserSearchService
페이지에서 Services.search 객체의 init() 메소드 사용을 제안합니다. nsIBrowserSearchService에 옵저버를 추가하는 방법
void init([optional] in nsIBrowserSearchInitObserver observer);
나는 그 시도하고 난에 한 번 기능을 실행 시작을 얻을 수 있었다하지만 추가 또는 제거하거나 검색 엔진을 재정렬 할 때 결코 다시 호출하지 않습니다. 그래서 나는 잘못된 것을하고 있습니다.
나는 관측자와 경험이 있지만 일반적인 선호도를 사용하고 있으며, 일반적으로 그것을 사용하여 아래 코드를 사용하여 제거합니다. 나는 nsIBrowserSearchService
으로 그것을하는 방법을 모르겠습니다. 나는 동일 또는 유사한 방법으로 nsIBrowserSearchService
를 관찰하고자하지만 난 내가 생각 Services.prefs
하지만 Services.search
을 관찰하고 있지 않다
branch = Services.prefs.getBranch("preferenceNameHere");
에 대한 넣어 될지 확실하지 않다, 그것은 더 getBranch 방법으로이 없습니다 내가 말할 수있는 한 멀리.
이
내가 일반적으로 Chrome.js에 관찰자를 추가 및 제거하는 방법이다const {Ci, Cu} = require("chrome");
const {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
branch = Services.prefs.getBranch("preferenceNameHere");
branch.addObserver("", observe, false);
function observe(subject, topic, data) {
// instanceof actually also "casts" subject
if (!(subject instanceof Ci.nsIPrefBranch)) {
return;
}
//do stuff here
};
exports.onUnload = function(reason) {
// Need to remove our observer again! This isn't automatic and will leak
// otherwise.
branch.removeObserver("", observe);
if(reason == "disable" || reason == "uninstall"){
//restore changes made by addon
}
};
사람이 그래서 변화를 관찰하고 내가 제대로 관찰자를 제거하도록 할 수 있습니다이 작업을 수행하는 방법에 저를 조언 해 줄 수 있습니다 검색 개체. 감사합니다
Noitidart. 정말 감사. 다른 이벤트는'engine-added'입니다. 'engine-loaded' 'engine-current'' engine-default'' engine-removed' – hooray
구문 오류가 수정되었습니다. 브래킷을 잊어 버렸습니다. 물론 사람이 내게 나와있는 메시지를 공유하는 것은 사용자가 엔진을 추가하거나 제거 할 때 발생하는 메시지입니다. – Noitidart
위의 내용을 편집하지 않으므로 여기에 게시하겠습니다. 고마워요. 정말 감사. 다른 이벤트는'engine-added'입니다. 'engine-loaded' 'engine-current'' 엔진 - 디폴트''엔진 - 제거'입니다. 새 엔진이 추가되면 엔진이 추가 된 다음 엔진이로드 된 두 가지 이벤트가 먼저 발생합니다. 'engine-current'는 새로운 엔진을 곧바로 사용하도록 설정하고'engine-removed'가 제거 될 때 발생합니다. – hooray