Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 让Pagemod和PageWorker模块一起工作?_Javascript_Dom_Firefox Addon_Pagemethods - Fatal编程技术网

Javascript 让Pagemod和PageWorker模块一起工作?

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: '

我正在从事一个Firefox扩展项目,该项目要求我使用TAB键切换页面上的所有链接,提取其URL,获取其源代码,并对其进行解析

目前,我可以使用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的源代码,包括以下内容(例如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);
      }
    });
  });
}