Javascript 让Pagemod和PageWorker模块一起工作?
我正在从事一个Firefox扩展项目,该项目要求我使用TAB键切换页面上的所有链接,提取其URL,获取其源代码,并对其进行解析 目前,我可以使用TAB键通过以下方式切换页面以获取其URL:Javascript 让Pagemod和PageWorker模块一起工作?,javascript,dom,firefox-addon,pagemethods,Javascript,Dom,Firefox Addon,Pagemethods,我正在从事一个Firefox扩展项目,该项目要求我使用TAB键切换页面上的所有链接,提取其URL,获取其源代码,并对其进行解析 目前,我可以使用TAB键通过以下方式切换页面以获取其URL: exports.main = function() {}; var pageMod = require("page-mod"); pageMod.PageMod({ include: "*.org", contentScriptWhen: 'ready', contentScript: '
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的源代码,包括以下内容(例如Wikipedia):
因此,如何将从Pagemod(在本例中为document.activeElement.href)获取的URL传递到页面工作者的contentURL中,并使其在每次按下TAB键时提取并显示源代码,因为Pagemod中不断提取新的URL
我尝试了下面的方法,但它不起作用,似乎不能调用页面工作者作为页面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);'+
'}'+
'});'+
' } };'
});
任何帮助都将不胜感激!:) 内容脚本不能使用插件sdk资源,因为它们在网页的上下文中运行。因此,您必须使用消息传递。您的按键处理程序应该向插件传递一条消息,内容如下
self.port.emit('url', document.activeElement.href)
然后在页面mod声明中,您将收到消息并创建一个页面工作程序以获取源:
onAttach: function(worker) {
worker.port.on('url', function(url) {
pageWorkers.Page({
contentURL: url,
contentScript: script,
contentScriptWhen: "ready",
onMessage: function(message) {
console.log(message);
}
});
});
}
请注意,您可能需要一些验证,以便只将URL传递回插件,并且您可能需要处理在页面工作程序中加载页面时出现的错误
onAttach: function(worker) {
worker.port.on('url', function(url) {
pageWorkers.Page({
contentURL: url,
contentScript: script,
contentScriptWhen: "ready",
onMessage: function(message) {
console.log(message);
}
});
});
}