2011-03-08 18 views
2

我正在開發一個Firefox擴展項目,該項目要求我使用TAB鍵切換頁面上的所有鏈接,提取其URL,提取其源代碼並解析它。使Pagemod和頁面工作者模塊一起工作?

目前,我能夠使用TAB鍵切換通過頁面來獲得它的URL由以下內容:

exports.main = function() {}; 
var pageMod = require("page-mod"); 

pageMod.PageMod({ 
    include: "*.org", 
    contentScriptWhen: 'ready', 
    contentScript: 

    'document.onkeydown = function(ev) {var key; ev = ev || event; key = ev.keyCode; if (key == 9) { setTimeout (function(){console.log(document.activeElement.href);'+ 
    '}, 1000); } };'+ 

    'var a = "Access Tab URL Extraction: New Page Found."; console.log(a);' 
}); 

...並獲得取任何的源代碼給URL具有以下(維基百科爲例):

exports.main = function() {}; 

console.log("Start"); 
var pageWorkers = require("page-worker"); 

var script = "var elements = document.body.innerHTML; " + 

      " postMessage(elements) " ; 

// Create a page worker that loads Wikipedia: 
pageWorkers.Page({ 
    contentURL: "http://en.wikipedia.org/wiki/Internet", 
    contentScript: script, 
    contentScriptWhen: "ready", 
    onMessage: function(message) { 
    console.log(message); 
    } 
}); 

所以,我怎麼能傳遞我從Pagemod得到了URL(在這種情況下document.activeElement.href)進入頁面,工人的contentURL並使其讀取和顯示源代碼每當我按Tab鍵,因爲新的URL保持在Pagemod中提取。

我試過以下,但它不起作用,似乎不能調用頁面工作者作爲page-mod的contentScript的一部分?

exports.main = function() {}; 
var pageMod = require("page-mod"); 
var pageWorkers = require("page-worker"); 


pageMod.PageMod({ 
    include: "*.org", 
    contentScriptWhen: 'ready', 
    contentScript: 

//Get New URLs by Pressing the Tab Key 

'document.onkeydown = function(ev) { var key; ev = ev || event; key = ev.keyCode; if (key == 9) { setTimeout (function(){console.log(document.activeElement.href);'+ 

    '}, 1000); } };'+ 



//Fetch new URL source code 

'document.onkeyup = function(ev) { var key; ev = ev || event; key = ev.keyCode; if (key == 9) {'+ 

'pageWorkers.Page({'+ 
'contentURL: "document.activeElement.href",'+ 
'contentScript: "var elements = document.body.innerHTML;"+"postMessage(elements)",'+ 
'contentScriptWhen: "ready",'+ 
'onMessage: function(message) {'+ 
'console.log(message);'+ 
'}'+ 
'});'+ 

    ' } };' 

}); 

任何幫助將不勝感激! :)

回答

2

內容腳本無法使用addon-sdk資源,因爲它們在網頁上下文中運行。所以你必須使用消息傳遞。你的按鍵處理程序應傳遞一個消息給附加的東西,如

self.port.emit('url', document.activeElement.href) 

,然後在你的頁面國防部聲明,你會收到消息,並創建一個頁面工人獲得源:

onAttach: function(worker) { 
    worker.port.on('url', function(url) { 
    pageWorkers.Page({ 
     contentURL: url, 
     contentScript: script, 
     contentScriptWhen: "ready", 
     onMessage: function(message) { 
     console.log(message); 
     } 
    }); 
    }); 
} 

請注意,您可能需要進行一些驗證,因此您只能將URL傳遞迴插件,並且您可能想要處理在頁面工作器中加載頁面的錯誤。

+0

謝謝,我以一些不同但類似的方式解決了這個問題。 – eastboundr 2011-11-17 17:38:22