我正在使用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);
}
});
});
如何编写一个函数来接受来自ContextData
的{{1}}并将其分配给extension.js中的dataToSend?
答案 0 :(得分:5)
@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员工]