Firefox插件sdk:基于剪贴板内容从不同站点检索值



我刚开始使用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/。不允许使用通配符。这个特性是目前只适用于内容脚本,不适用页面脚本

最新更新