Javascript chrome版本57.0.2987中的chrome.runtime.sendMessage错误

Javascript chrome版本57.0.2987中的chrome.runtime.sendMessage错误,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我已将我的google chrome浏览器从版本:56.0.2924更新为57.0.2987 我有一个扩展,它不能在这个新版本中工作。我进行了调试,发现原因是chrome.runtime.sendMessage不工作。我在后台页面发送消息: chrome.runtime.onMessage.addListener( function (request, sender, sendResponse) { if (request.name == EVENT_ENUM.JOB_INIT)

我已将我的google chrome浏览器从版本:56.0.2924更新为57.0.2987

我有一个扩展,它不能在这个新版本中工作。我进行了调试,发现原因是chrome.runtime.sendMessage不工作。我在后台页面发送消息:

chrome.runtime.onMessage.addListener(
   function (request, sender, sendResponse) {
     if (request.name == EVENT_ENUM.JOB_INIT) {       
       //do something
     }
   });
我有一个听众(同一个背景页面):

我的美甲师肯定注入了这些代码


但是在运行chrome.runtime.sendMessage之后,什么也没有发生。我搜索了一下,但没有发现任何问题。有人和我有同样的问题吗?谢谢

我不知道为什么它在56.0.2924中对您有效,因为这一行为早在49.0.2622.0中就被有意更改了,请参见crbug.com/commit:

切勿将端口连接到同一机架。连接到同一帧没有意义,因为不应为同一帧触发onMessage

Chrome 49之后它对您有效的事实是一个bug,现已修复。
相同的问题已经在crbug.com/上报告过,因此您可以启动它以跟踪进度


解决方案显然是将侦听器提取到单独的函数:

function onMessage(message, sender, sendResponse) {
    .........
}

chrome.runtime.onMessage.addListener(onMessage);
然后直接打电话给它:

onMessage(.......);

“端口”和“框架”的概念如何应用于此问题?在这种情况下,“框架”到底是什么?
frame
基本上是一个
窗口
:每个内置的扩展页(如弹出/背景/选项或网页)都有一个,iFrame也是页面,因此它们有自己的
窗口
。至于
端口
,它是由runtime.sendMessage自动创建的,它只是runtime.connect和port.postMessage的包装。
onMessage(.......);