0

我刚开始使用 firefox 插件来帮助我的团队加快我们的工作,我正在尝试创建的内容:当在特定站点上时(我们称之为mysite.com/input),我想自动填写一个带有 id 的输入:来自存储在剪贴板上的值的“textinput” 。是的,它很简单,但粘贴它就足够了,不是吗?...现在是转折点:

我需要另一种形式的值:在剪贴板上它是 x/y/z。有一个数据库站点(我们称它为 database.com),在该站点上进行类似database.com?s=x/y/z的搜索将直接给出可以从中获得正确值的页面,因为它有一个 id:#结果

我迷失了如何在页面和内容脚本之间正确通信,我什至不确定我应该以什么顺序使用 pagemod 和 page-worker

请帮帮我!谢谢!

4

2 回答 2

2

基本流程是这样的:

  • 在您的内容脚本中,您以某种方式从表单中获取值。我会把它留给你。

  • 仍然在内容脚本中,您使用 self.port.emit 将数据发送到 main.js:

代码:

self.port.emit('got-my-value', myValue);
  • 在 main.js 中,您将收到“got-my-value”事件并使用请求模块发出跨域请求。

代码:

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();
        });
    }
});
  • 如果您需要在原始工作人员中接收回数据,则需要另一个侦听器来监听返回的事件。

代码:

self.port.on('got-other-data', function(value) {
    // do something
})
于 2013-01-21T05:03:06.720 回答
0

在过去的两天里,我一直在努力解决同样的问题,直到我发现这个:

https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts/Cross_Domain_Content_Scripts

它们表明以下内容:

但是,您可以通过将它们添加到附加组件的package.json中的“cross-domain-content”键下来为特定域启用这些功能,该键本身位于“permissions”键下:

 "permissions": {
     "cross-domain-content": ["http://example.org/", "http://example.com/"] } 

列出的域必须包括方案和完全限定的域名,并且这些域必须与提供内容的域完全匹配 - 因此在上面的示例中,内容脚本将不允许访问从 https://example.com/提供的内容. 不允许使用通配符。此功能目前仅适用于内容脚本,不适用于插件随附的 HTML 文件中包含的页面脚本。

这对我有用。

于 2014-12-24T00:26:12.613 回答