gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 13:36:53 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com