来自ContentScript的Chrome扩展消息未收听事件

时间:2017-03-13 16:55:34

标签: javascript google-chrome google-chrome-extension

chrome.runtime.sendMessage触发contentScript中的事件时,background.js / popup.js无法接收/响应该消息。但是,当我在执行而不是事件时触发内容脚本chrome.runtime.sendMessage时,popup.js能够响应,但不能响应background.js

manifest.js的相关部分

 "background": {
    "scripts": "background.js"
  },
  "content_scripts": [{
    "matches": ["*://*/*"],
    "js": ["lib/jquery.js", "crop.js"],
    "run_at": "document_end"
  }],
  "browser_action": {
    "default_icon": "camera.png",
    "default_title": "Take a screen shot!",
    "default_popup": "popup.html"
  },
  "permissions": [
    "activeTab"
  ],
  "manifest_version": 2
}

侦听事件的popup.js的相关部分

    document.addEventListener('DOMContentLoaded', function() {
    initPopup();
    chrome.runtime.onMessage.addListener( function(request, sender, sendResponse) {
          console.log(sender.tab ?
                      "from a content script:" + sender.tab.url :
                      "from the extension");
          sendResponse({farewell: "goodbye"});
          return true;
    });
})

以编程方式注入crop.js(内容脚本)的popup.js的相关部分

 function promptCrop() {
      chrome.tabs.executeScript({
        file: 'lib/jquery.js'
      })
      chrome.tabs.insertCSS({
        file: 'crop.css'
      })
      chrome.tabs.executeScript({
        file: 'crop.js'
      })
    }

crop.js(contentScript)的相关部分

    $(overlay)
    .mousedown(function(ev) {
        //irrelevant
    })
    .mousemove(function(ev) {
        //irrelevant
    })
    .mouseup(function(ev) {
        isDragging = false;
        cropPause(ev);
    })

function cropPause(ev) {
    cropSelect.end.x = ev.clientX;
    cropSelect.end.y = ev.clientY;

    chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
        console.log('message was sent');
        alert(response);
    });
}

以上 crop.js 不起作用。消息始终返回undefined。但是,如果在事件之外发送chrome.runtime.sendMessage,脚本独立的任何地方,popup.js上的eventlistener都可以响应它。

0 个答案:

没有答案