2015-03-29 3 views
1

Я пытаюсь написать свой первый аддон firefox с помощью sdk.querySelectorAll возвращает массив с пустыми объектами в Firefox Addon

На данный момент я пытаюсь взаимодействовать с сайтом amazon.

Итак, однажды я ввел строку для поиска и просмотра результата. Я хочу список всех результатов.

Я определил список, который содержит полный поиск первой страницы результатов (16 элементов).

Команда

document.querySelectorAll('ul#s-results-list-atf li.s-result-item') 

отлично работает в консоли Firefox с помощью Firebug.

Однако, используя его в сценарии аддонов firefox, он возвращает список из 16 пустых объектов.

У кого-нибудь есть идея, почему это происходит?

UPDATE: Вот полный код:

main.js:

var buttons = require('sdk/ui/button/action'); 
var tabs = require("sdk/tabs"); 
var pageMod = require("sdk/page-mod"); 
var self = require("sdk/self"); 
var data = self.data; 

var button = null; 
var hoverState = 0; 

/*************/ 

/* 
pageMod.PageMod({ 

    include: "*.mozilla.org", 
    contentScriptFile: [data.url("jquery-1.10.2.min.js"), data.url("content.js")] 

}); 
*/ 


// Listen for tab content loads. 
tabs.on('ready', function(tab) { 
    console.log('###--------> tab is loaded', tab.title, tab.url); 

    var worker = tab.attach({ 
     contentScriptFile: [data.url("jquery-1.10.2.min.js"), data.url("content.js")] 


    }); 

    if (tab.url.indexOf("www.amazon.de") > -1) { 

     console.log("### ---> Amazon Website detected"); 

     button = buttons.ActionButton({ 
     id: "mm1-productIdCatcher", 
     label: "Enable Id Catcher", 
     icon: { 
      "16": "./icon-16.png", 
      "32": "./icon-32.png", 
      "64": "./icon-64.png" 
     }, 
      onClick: function(state) { 
       //tabs.open("https://www.mozilla.org/"); 
       //console.log("###------> test"); 


       if(hoverState == 0) { 
        hoverState = 1; 
        worker.port.emit("enable"); 

       } else { 
        hoverState = 0; 
        worker.port.emit("disable"); 
       } 

      } 
     }); 





     worker.port.emit("message", "+++ amazon.de detected +++"); 

    } 
    else { 
     if(button != null) { 
      button.destroy(); 
      hoverState = 0; 
     } 

    } 

}); 

content.js:

self.port.on("message", function(message) { 
    console.log(message); 
}); 

self.port.on("enable", function() { 

    console.log("disabling..."); 


}); 

self.port.on("disable", function() { 

    console.log("enabling..."); 



    var queryList = document.querySelectorAll('ul#s-results-list-atf li.s-result-item'); 
    //var queryList = document.getElementsByClassName('s-result-item'); 

    console.log("queryList: ", queryList 
    console.log("queryList[0]: ", queryList[0]); 

    var query_0 = document.querySelector("#result_0"); 

    console.log("query_0: ", query_0); 

    console.log("title: ", document.title); 

}); 

И выход:

console.log: mm1-getproductid: disabling... 
console.log: mm1-getproductid: enabling... 
console.log: mm1-getproductid: queryList: {"0":{},"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{}} 
console.log: mm1-getproductid: queryList[0]: {} 
console.log: mm1-getproductid: query_0: {} 
console.log: mm1-getproductid: title: Suchergebnis auf Amazon.de für: qivicon 

использованием

document.querySelectorAll('ul#s-results-list-atf li.s-result-item') 

в консоли на светлячок получить меня

NodeList[li#result_0.s-result-item, li#result_1.s-result-item, li#result_2.s-result-item, li#result_3.s-result-item, li#result_4.s-result-item, li#result_5.s-result-item, li#result_6.s-result-item, li#result_7.s-result-item, li#result_8.s-result-item, li#result_9.s-result-item, li#result_10.s-result-item, li#result_11.s-result-item, li#result_12.s-result-item, li#result_13.s-result-item, li#result_14.s-result-item, li#result_15.s-result-item] 
+1

Вы, вероятно, должны предоставить немного больше контекста. в частности, как вы запускаете это в контексте страницы. и, возможно, вам также следует предоставить точный выход журнала. – the8472

+0

Я добавил полный код. – solick

+0

Похоже, вы просто смотрите на разные консоли. попробуйте использовать панель инструментов браузера. – the8472

ответ

0

Насколько я могу судить, это толькоconsole.log, который показывает элементы, как пустой. Дополнительный код сможет управлять элементами DOM, как обычно.

Я думаю, что это как-то связано с how content scripts interact with page scripts, но я не очень понимаю это сам.