gpt4 book ai didi

google-chrome - Chrome 消息传递错误 : Attempting to use a disconnected port object

转载 作者:行者123 更新时间:2023-12-02 07:40:29 39 4
gpt4 key购买 nike

我的 chrome 扩展程序使用长期存在的“端口”对象在“内容脚本”和“弹出”页面之间传递消息。 “弹出窗口”能够向“内容脚本”事件监听器发送消息。但是,“内容脚本”中的“端口”对象无法将消息发送到“弹出”页面。

var port = chrome.extension.connect({"name":"swap"});

// listener for incoming connections
chrome.extension.onConnect.addListener(function( incomingPort ){

// listener on incoming messages
incomingPort.onMessage.addListener(function( msg ){

if( msg.command === 'get_scripts' ){
//do work

}

var scrs = { 'scripts' : 'name' };
var result = port.postMessage( scrs );

});
});

当执行 'port.postMessage(Object obj)' 时,插件抛出以下错误,

Error in event handler for 'undefined': Attempting to use a disconnected port object   Error: Attempting to use a disconnected port object
at PortImpl.postMessage (miscellaneous_bindings:54:5)
at chrome-extension://loiamkgdhfjdlkcpehnebipeinpcicfj/swap.js:27:31
at [object Object].dispatch (event_bindings:203:41)
at Object.<anonymous> (miscellaneous_bindings:250:22) event_bindings:207

我尝试过使用“Port”对象和“incomingPort”对象,两者都抛出相同的“错误”。感觉它与预先创建的“端口”对象的范围有关。

插件代码可在这个 git 存储库中获得 https://github.com/snambi/chrome_plugin/tree/master/src/chrome

这个插件有什么问题?

最佳答案

我已经查看了您的代码,但对我来说毫无意义:

  • 您知道端口在两端都有一个onMessagepostMessage 方法吗?一个端口足以双向通信。
  • 以您的方式在弹出窗口和内容脚本之间进行通信将非常困难。很难同时启动内容脚本和弹出窗口。

由于您的扩展程序没有后台页面,并且内容脚本相对无用,因此我认为您的扩展程序的核心是浏览器操作弹出窗口。除了默认注入(inject)内容脚本,您还可以使用以下流程:

  1. 用户点击浏览器操作
  2. popup.htmlpopup.js 被执行。

我还看到您正在使用 port == null 来检查端口是否有效。如果这样做,请通过在端口断开连接时使变量无效来确保比较有意义:

var port;
chrome.runtime.onConnect.addListener(function(_port) {
// ...optional validation of port.name...

port = _port;
port.onMessage.addListener(function(message) { /* .. logic .. */});
port.onDisconnect.addListener(function() {
port = null;
});
});

关于google-chrome - Chrome 消息传递错误 : Attempting to use a disconnected port object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11782875/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com