我刚开始使用firefox插件来帮助我的团队加快我们的工作,我正在尝试创建:当在一个特定的网站上(让我们称之为mysite.com/input),我想自动填写一个输入id:"textinput"从值是存储在剪贴板。是的,这很简单,但它将是简单到足以粘贴,不是吗?这里是转折:
我需要另一种形式的值:在剪贴板上它是x/y/z。有一个数据库站点(我们叫它database.com),在上面搜索像database.com?s=x/y/z将直接给出页面,从那里可以获得正确的值,因为它有一个id: #result
我迷失了如何正确地在页面和内容脚本之间进行通信,我甚至不确定我应该以什么顺序使用pagemod和page-worker
请帮帮我!谢谢你!
基本流程如下:
-
在您的内容脚本中,您以某种方式从表单中获取值。
-
仍然在内容脚本中,使用self.port.emit:
将数据发送到main.js
self.port.emit('got-my-value', myValue);
- 在main.js中,你会收到' get -my-value'事件,并使用request模块发出跨域请求。
require('page-mod').PageMod({
include: 'somesite.com',
contentScriptFile: data.url('somescript.js'),
onAttach: function(worker) {
worker.port.on('got-my-value', function(value) {
require('request').Request({
url: 'http://someurl.com',
onComplete: function(response) {
console.log(response);
// maybe send data back to worker?
worker.port.emit('got-other-data', response.json);
}
}).post();
});
}
});
- 如果你需要在原始worker中接收回数据,你需要为返回的事件添加另一个侦听器。
self.port.on('got-other-data', function(value) {
// do something
})
在过去的2天里,我一直在努力解决同样的问题,直到我发现这个:
https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/Cross_Domain_Content_Scripts它们表示以下内容:
但是,您可以通过添加将它们放到附加组件的包中。"cross-domain-content"下的键,它本身位于"permissions"键下:
"permissions": {
"cross-domain-content": ["http://example.org/", "http://example.com/"] }
列出的域必须包含方案而完全合格的域名,这些必须完全匹配服务于内容的域——在上面的例子中,是内容脚本将不允许访问从https://example.com/。不允许使用通配符。这个特性是目前只适用于内容脚本,不适用页面脚本