2014-11-09 1 views
0

Я пишу небольшое расширение, которое позволяет мне легко отправлять ссылки на 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, ни предупреждения. Какие-нибудь советы ?

ответ

2

Ваше сообщение отправлено до события document_start Выполнение скриптов содержимого.

Чтобы убедиться, что он работает, переключиться на использование programmatic injection:

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 
    chrome.tabs.executeScript(
    tab.id, 
    {file: "contextMenu-RedditSubmit.js"}, 
    function() { 
     // Here, it is guaranteed that the script finished executing 
     // (or there was an error) 
     chrome.tabs.sendMessage(tab.id, { 
     "url" : submittedURL, 
     "type" : "submitPage" 
     }); 
    } 
); 
}); 
+0

Тем не менее не работает. Я также изменил manifest.json и добавил привилегии, необходимые для программной инъекции. –

+0

Ну, попробуйте добавить проверку ошибок. Добавьте обратный вызов 'sendMessage' и проверьте' chrome.runtime.lastError' в обоих. – Xan

Смежные вопросы