Я пишу небольшое расширение, которое позволяет мне легко отправлять ссылки на reddit. Это расширение добавляет новое контекстное меню («Отправить страницу»). Если пользователи щелкают правой кнопкой мыши и выбирают это меню, страница www.redddit.com/submit открывается на другой вкладке и отправляется страница, с которой было вызвано меню.Необходимо отправить сообщение из контекстного меню в сценарий содержимого
Я добавил контекстное меню:
contextMenu.js
// Setup where the menu is presents;
// A list of [context, context menu text, id]
var redditURL = 'http://www.reddit.com/submit';
var contexts = [["page", "Submit page", "id-submitPage"], ["link", "Submit link", "id-submitLink"], ["editable", "Submit text", "id-submitText"], ["image", "Submit image", "id-submitImage"]];
// Add all menus to their context
contexts.forEach(function(element) {
chrome.contextMenus.create({
"title" : element[1],
"contexts" : [element[0]],
"id" : element[2]
});
});
// Add actions to menus
chrome.contextMenus.onClicked.addListener(function(info, tab) {
var submittedURL = tab && tab.url;
if (info["menuItemId"] == "id-submitPage") {
chrome.tabs.create({
"url" : redditURL
}, function(tab) {
// After we create the tab we also send a message to the content
// script associated with the page to intercept our info
console.log(submittedURL);
chrome.tabs.sendMessage(tab.id, {
"url" : submittedURL,
"type" : "submitPage"
});
});
}
});
Как вы можете в видеть в AddListener я использую chrome.tabs.sendMessage
отправить URL Я подаю к содержанию скрипт, связанный с: redditURL
.
Сценарий Содержание: Контекстное-RedditSubmit.js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
alert('here');
console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");
});
И файл манифеста:
...
"background": {
"scripts": ["contextMenu.js"],
"persistent": false
},
"content_scripts": [
{
"matches": ["http://www.reddit.com/submit"],
"js": ["contextMenu-RedditSubmit.js"],
"run_at": "document_start"
}
],
...
Проблема мои сообщения не принимаются внутри скрипта содержания Контекстное-RedditSubmit.js , Я не вижу ни console.log, ни предупреждения. Какие-нибудь советы ?
Тем не менее не работает. Я также изменил manifest.json и добавил привилегии, необходимые для программной инъекции. –
Ну, попробуйте добавить проверку ошибок. Добавьте обратный вызов 'sendMessage' и проверьте' chrome.runtime.lastError' в обоих. – Xan