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



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

var ContextData;
appAPI.contextMenu.add("key1", "Send Data To Server", function (data) {
var ContextData = 'pageUrl: ' + data.pageUrl + 'rn' +
'linkUrl: ' + data.linkUrl + 'rn' +
'selectedText:' + data.selectedText + 'rn' +
'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.js中的ContextData,并将其分配给extension.js中的dataToSend?

@Neel如果我正确理解你的要求,@Rob基本上是正确的,尽管稍微澄清一下可能有助于

根据设计/架构,extension.js代码在每个HTML页面上运行,即为加载的每个URL运行一个单独的extension.js实例。相反,上下文菜单在浏览器级别(而不是HTML页面)运行,因此在background.js文件中正确编码。但是,background.js代码无法直接访问活动选项卡中HTML页面上运行的extension.jsinstance代码,因此必须通过消息传递来传递数据。(有关作用域的更多信息,请参阅作用域概述)

显然,用户单击活动选项卡上的上下文菜单项(即显示正在查看的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 + 'rn' +
'linkUrl: ' + data.linkUrl + 'rn' +
'selectedText:' + data.selectedText + 'rn' +
'srcUrl:' + data.srcUrl;
appAPI.message.toActiveTab({type:'dataToSend', data: ContextData});
}, ["all"]);
});

扩展.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的员工]

最新更新