gpt4 book ai didi

javascript - 让 Pagemod 和 Page-worker 模块一起工作?

转载 作者:行者123 更新时间:2023-11-29 22:35:33 25 4
gpt4 key购买 nike

我正在开发一个 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 的源代码(例如维基百科):

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(在本例中为 document.activeElement.href)获得的 URL 传递给 Page-worker 的 contentURL,并使其在每次按 TAB 键作为新 URL 时获取并显示源代码继续在 Pagemod 中提取。

我尝试了以下但它不起作用,似乎无法将页面 worker 作为页面模组的 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);'+
'}'+
'});'+

' } };'

});

任何帮助将不胜感激! :)

最佳答案

内容脚本不能使用 addon-sdk 资源,因为它们在网页的上下文中运行。所以你必须使用消息传递。您的按键处理程序应该将一条消息传递回插件,例如

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

然后在您的 page-mod 声明中您将收到消息并创建一个 page-worker 以获取源代码:

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

请注意,您可能需要进行一些验证,以便仅将 URL 传回插件,并且您可能需要处理在页面工作程序中加载页面时出现的错误。

关于javascript - 让 Pagemod 和 Page-worker 模块一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5237785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com