javascript - 在crossrider中将数据从background.js发送到extension.js

标签 javascript browser-extension crossrider

我正在使用 crossrider 开发浏览器扩展。 我添加了一个上下文菜单(background.js)

   var ContextData;
    appAPI.contextMenu.add("key1", "Send Data To Server", function (data) {
        var ContextData = 'pageUrl: ' + data.pageUrl + '\r\n' +
                         'linkUrl: ' + data.linkUrl + '\r\n' +
                         'selectedText:' + data.selectedText + '\r\n' +
                         'srcUrl:' + data.srcUrl;

    }, ["all"]);

用户点击时,我想将ContextData发送到extension.js。在extension.js,一些函数将接收数据并将其发送到我的服务器(Rest API它将接受数据)。

为了将数据发送到服务器,我已经对此进行了测试,它工作正常(extension.js 中的代码示例)

appAPI.ready(function($) {

var dataToSend =="test data";

    appAPI.request.post({
        url: 'REST API URL',
        postData: dataToSend,
        onSuccess: function(response, additionalInfo) {
            var details = {};

            details.response = response;

        },
        onFailure: function(httpCode) {
        //  alert('POST:: Request failed. HTTP Code: ' + httpCode);
        }
    });
});

如何编写一个函数来接受来自 background.jsContextData 并将其分配给 extension.js 中的 dataToSend?

最佳答案

@Neel 如果我正确理解了您的要求,@Rob 基本上是正确的,尽管一些澄清可能会有所帮助

根据设计/架构,extension.js 代码在每个 HTML 页面上运行,即为每个加载的 URL 运行一个单独的 extension.js 实例。相反,上下文菜单在浏览器级别(而不是 HTML 页面)运行,因此在 background.js 文件中正确编码。但是,background.js 代码无法直接访问在事件选项卡的 HTML 页面上运行的 extension.js 实例代码,因此必须 communicate the data via messaging 。 (有关范围的更多信息,请参阅 Scopes Overview )

显然,用户单击事件选项卡上的上下文菜单项(即显示正在查看的 HTML 页面的页面);因此,一旦创建了 ContextData 字符串,您就可以使用 appAPI.message.toActiveTab将字符串发送到在单击上下文菜单项的页面/选项卡上运行的 extension.js 实例。

既然如此,使用您的代码示例,您可以实现此目标,如下所示:

background.js:

appAPI.ready(function($) {
  var ContextData;
  appAPI.contextMenu.add("key1", "Send Data To Server", function (data) {
    var ContextData = 'pageUrl: ' + data.pageUrl + '\r\n' +
      'linkUrl: ' + data.linkUrl + '\r\n' +
      'selectedText:' + data.selectedText + '\r\n' +
      'srcUrl:' + data.srcUrl;
    appAPI.message.toActiveTab({type:'dataToSend', data: ContextData});
  }, ["all"]);
});

extension.js:

appAPI.ready(function($) {
  var dataToSend =="test data";

  appAPI.message.addListener(function(msg) {
    if (msg.type === 'dataToSend') {
      appAPI.request.post({
        url: 'REST API URL',
        postData: dataToSend,
        onSuccess: function(response, additionalInfo) {
            var details = {};
            details.response = response;
        },
        onFailure: function(httpCode) {
          //  alert('POST:: Request failed. HTTP Code: ' + httpCode);
        }
      });   
    }
  });
});

[免责声明:我是 Crossrider 员工]

关于javascript - 在crossrider中将数据从background.js发送到extension.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740482/

相关文章:

css - 如何设置扩展侧边栏的样式?

javascript - kha 原生目标上没有真正的 'fullscreen' 选项?

httpresponse - 使用 Crossrider 扩展检查 HTTP 响应

javascript - 在 JavaScript 中描述成员和容器之间关系的最佳术语

javascript - browsersync 可以在不刷新的情况下在浏览器中注入(inject)更新的内容吗?

javascript - 接收带有键入文本效果的即时 chatgpt 响应

ajax - 如何从 firefox 浏览器扩展发出 AJAX 请求?

browser - Safari crossrider 扩展图像不良

javascript - 无效的配置对象 output.path 不是绝对路径

javascript - 如何在 Node 模块中构造类?