" chrome.runtime.onMessage" :在创建新选项卡之前发送响应

时间:2016-01-18 13:51:10

标签: google-chrome-extension response

我在chrome.notifications.onClicked.addListener发送回复时遇到问题。

content_scripts

chrome.runtime.sendMessage({action:'openlink', url:'http://stackoverflow.com'}, function(response) {
   console.log(response);
});

背景

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
   if(request && request.action === 'openlink') {
      chrome.notifications.create('MyUniqueID',{
         type: 'basic',
         title: 'Open link',
         message: request.url,
         iconUrl: 'icon.jpg'
      });
      chrome.notifications.onClicked.addListener(function('MyUniqueID') {
         sendResponse({action:'notification-clicked'}); // <--- This
         chrome.tabs.create({url:request.url});
      });
   }
});

所以我想知道我做错了什么?

2 个答案:

答案 0 :(得分:0)

收到邮件后,必须立即使用sendResponse作为回复发件人的方式:好的,我收到了您的邮件,没关系,所以继续使用您的代码。

当您需要发送类似情况的消息时,您需要再次调用该函数:

chrome.tabs.sendMessage

这意味着在后台和内容中使用chrome.runtime.onMessage.addListener。

参考:Chrome Extension Message Passing

答案 1 :(得分:0)

Nah,

之后添加 return true
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
   if(request && request.action === 'openlink') {
      chrome.notifications.create('MyUniqueID',{
         type: 'basic',
         title: 'Open link',
         message: request.url,
         iconUrl: 'icon.jpg'
      });
      chrome.notifications.onClicked.addListener(function('MyUniqueID') {
         sendResponse({action:'notification-clicked'}); // <--- This
         chrome.tabs.create({url:request.url});
      });
      return true;
   }
});