2013-09-06 2 views
0

Я делаю расширение для Android-браузера Firefox, и когда я его тестирую, он работает нормально, тогда, если я выключу firefox или не буду использовать его какое-то время, расширение не будет работать, если оно не будет повторно активировано. Дело в том, что меню добавленных элементов есть, но расширение не работает (предполагается, что некоторые свойства проверяются в документе страницы при загрузке или выборе, а затем отправляют запрос на мой localhost). Вы не знаете, почему это происходит?Почему мой firefox для расширения Android отключен самостоятельно?

Вот код, где я добавить пункты меню и слушателей:

function loadIntoWindow(window) { 
     if (!window) 
     return; 
     if (isNativeUI()) { 
     //adding the items to the menu 
     icoUrl = gAddonData.resourceURI.spec + "iconMenu.png"; //the icon uri 
     var tabAddr=gAddonData.resourceURI.spec+"/content/t.html"; // the uri of a page about the extension 
     //the item opens the page and displays a toast 
      menuIdInfo = window.NativeWindow.menu.add("About TrackDetect",icoUrl, function({  
      window.BrowserApp.addTab(tabAddr); 
      showToast(window); }); 
      // This menu item shows the details collected about the docHTML of currently visited page, these details are brought by the listeners ("TabSelect" and "pageshow") 
      gDoorhangerMenuId = window.NativeWindow.menu.add("Show details ", icoUrl, 
      function(){ //doc is global variable 
     if (doc==null) {window.NativeWindow.toast.show("Please REACTIVATE TrackDetect extension.", "long");} 
      else {showDoorhanger(window, trackersSum);}}); 
      } 
      //adding the listeners 
      window.BrowserApp.deck.addEventListener("TabSelect", function(){ watchTab(window);}, false); 

      let addListener = function() { 
      window.BrowserApp.deck.addEventListener("pageshow", function(){ watchTab(window);}, false); 
      window.NativeWindow.toast.show("Starting to detect trackers.", "long"); 
      }; 

      if(window.BrowserApp.deck) { 
      // BrowserApp.deck has been initialized 
      addListener(); 
      } 
      else { 
      // use the chrome window to wait for BrowserApp to initialize 
      window.addEventListener("UIReady", addListener); 
      } 
      } 

На самом деле ошибка, что я получаю:

Error: "TypeError: window.BrowserApp.deck is null" 

и мне нужно, чтобы добавить window.BrowserApp.deck событие Слушатели, как показано в приведенном выше коде. Затем я вызываю метод в запуске:

var windowListener = { 
    onOpenWindow: function(aWindow) { 
    // Wait for the window to finish loading 
    let domWindow = aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow); 
    domWindow.addEventListener("load", function() { 
     domWindow.removeEventListener("load", arguments.callee, false); 
     loadIntoWindow(domWindow); 
    }, false); 
    }, 

    onCloseWindow: function(aWindow) { 
    }, 

    onWindowTitleChange: function(aWindow, aTitle) { 
    } 
}; 

function startup(aData, aReason) { 
gAddonData = aData; 
setDefaultPrefs(); 
    // Load into any existing windows 
    let windows = Services.wm.getEnumerator("navigator:browser"); 
    while (windows.hasMoreElements()) { 
    let domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow); 
    loadIntoWindow(domWindow); 
    } 
Services.scriptloader.loadSubScript(aData.resourceURI.spec + "content/scanner.js", TrackScanner); 
Services.scriptloader.loadSubScript(aData.resourceURI.spec + "content/storageReq.js", TrackReq); 

Services.wm.addListener(windowListener); 
obs.addObserver(httpRequestObserver, "http-on-modify-request", false); 
obs.addObserver(httpResponseObserver, "http-on-examine-response", false); 

try { 
    alertsService.showAlertNotification(gAddonData.resourceURI.spec+"skin/oeil1.png", 
             "TrackDetect activated", "Detecting web Tracking.", 
             false, "", null, ""); 
} catch (e) { 
    // if the extension fail to start 
    alertsService.showAlertNotification("", 
             "Please REACTIVATE Trackdetet", "Please REACTIVATE Trackdetet.", 
             false, "", null, ""); 
} 

if (aReason== ADDON_INSTALL) { 
//some code to set a cookie 
} 

if ((aReason== APP_STARTUP)||(aReason== ADDON_ENABLE)||(aReason== ADDON_UPGRADE)) { 
//some code to get a cookie 
} 
} 

Тогда в завершении работы:

function shutdown(aData, aReason) { 
    if ((aReason == APP_SHUTDOWN) || (aReason == ADDON_DISABLE) || (aReason == ADDON_DOWNGRADE) || (aReason == ADDON_UNINSTALL)) 
    { // code to make sure that the cookie I set is there 
} 

    //cleaning up (removing observers and the window listener) 
    // Stop listening for new windows 
    Services.wm.removeListener(windowListener); 
    obs.addObserver(httpRequestObserver, "http-on-modify-request", false); 
    obs.removeObserver(httpResponseObserver, "http-on-examine-response", false); 

    // Unload from any existing windows 
    let windows = Services.wm.getEnumerator("navigator:browser"); 
    while (windows.hasMoreElements()) { 
    let domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow); 
    unloadFromWindow(domWindow); 
    } 
} 

Я надеюсь, что теперь, вы можете помочь мне больше, потому что я не знаю, почему окно. BrowserApp.deck становится null, когда я закрываю браузер или не использую его некоторое время. Спасибо.

+0

Без кода и более подробной информации нет возможности ответить на этот вопрос, не задав волшебный шарик 8 ... Пожалуйста, внесите изменения в свой вопрос. – nmaier

+0

Вышеуказанная функция будет вызвана функцией запуска в bootstrap.js расширения. Надеюсь, поможет. – user2102196

+0

Недостаточно. Вопросы, связанные с проблемами с написанным кодом, должны описывать конкретную проблему - и включать действительный код для ее воспроизведения - в самом вопросе. См. Http://sscce.org/ для руководства. Есть ли ошибка в консоли. – nmaier

ответ

0

ошибка была вызвана слушателем событий tabSelect, он был добавлен в неправильном месте, чтобы заставить его работать правильно, я сделал это:

// добавление слушателей

 let addListener = function() { 

окна. BrowserApp.deck.addEventListener ("TabSelect", function() {watchTab (window);}, false); window.BrowserApp.deck.addEventListener ("pageshow", function() {watchTab (window);}, false); window.NativeWindow.toast.show («Начать обнаружение трекеров», «long»); };

 if(window.BrowserApp.deck) { 
     // BrowserApp.deck has been initialized 
     addListener(); 
     } 
     else { 
     // use the chrome window to wait for BrowserApp to initialize 
     window.addEventListener("UIReady", addListener); 
     } 

Затем, конечно, я удалил этих слушателей позже.

Смежные вопросы