Отправка данных из background.js в extension.js в кроссрайдер
Я разрабатываю расширение для браузера с использованием 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 некоторая функция получит данные и отправит их на мой сервер (A 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
от background.js
и назначить его dataToSend в extension.js?
1 ответ
@Neel Если я правильно понимаю ваши требования, @Rob по существу верен, хотя небольшое пояснение может помочь
По своей структуре / архитектуре код extension.js выполняется на каждой странице HTML, т. Е. Для каждого загружаемого URL-адреса запускается отдельный экземпляр extension.js. Напротив, контекстное меню работает на уровне браузера (не HTML-страницы) и, следовательно, правильно закодировано в файле background.js. Однако код background.js не имеет прямого доступа к коду экземпляра extension.js, запущенному на странице HTML активной вкладки, и поэтому должен передавать данные через обмен сообщениями. (Для получения дополнительной информации о областях см. Обзор областей).
Очевидно, что пользователь щелкает пункт контекстного меню на активной вкладке (то есть на странице, показывающей просматриваемую 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]