gpt4 book ai didi

google-chrome-extension - 在 dart 中构建 chrome 扩展时出现 chrome.runtime.onConnect 问题

转载 作者:行者123 更新时间:2023-12-01 23:53:40 24 4
gpt4 key购买 nike

我在运行 dart2js 时遇到以下问题我的 chrome 扩展的编译版本:

Uncaught TypeError: undefined is not a function

执行时

  context['chrome']['runtime']['onConnect'].callMethod('addListener', [(port) { ... }]);

我创建了一个可能指向原因的示例:

背景.dart

import 'dart:js';

void main() {
print("main(): context['chrome']['runtime']['onConnect'] (${context['chrome']['runtime']['onConnect'].runtimeType}): ${context['chrome']['runtime']['onConnect']}");
}

在 Dartium 中打印:

main(): context['chrome']['runtime']['onConnect'] (JsObject): [object Object]

但在 Chrome 中:

main(): context['chrome']['runtime']['onConnect'] (Event): Instance of 'Event'

是否与 Difference between Dartium and dart2js when building chrome extensions有关( https://code.google.com/p/dart/issues/detail?id=17086 )?

有人可以建议如何注册 chrome.runtime.onConnect在 Dartium 和 Chrome 中都可以使用的监听器?

最佳答案

看了之后common.dartchrome.dart包裹:

void _ensureHandlerAdded() {
if (!_handlerAdded) {
// TODO: Workaround an issue where the event objects are not properly
// proxied in M35 and after.
var jsEvent = _api[_eventName];
JsObject event = (jsEvent is JsObject ? jsEvent : new JsObject.fromBrowserObject(jsEvent));
event.callMethod('addListener', [_listener]);
_handlerAdded = true;
}
}

似乎有必要包装 Event进入 JsObject使其在 dart:js 中工作.

以下内容也同样需要:
  • port.onDisconnect
  • port.onMessage

  • 如果有人知道跟踪此问题的现有问题,请随时添加它。

    关于google-chrome-extension - 在 dart 中构建 chrome 扩展时出现 chrome.runtime.onConnect 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193392/

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