首页 > 解决方案 > `chrome.runtime.sendNativeMessage('com.add0n.node'` 在网络扩展中是什么意思

问题描述

我正在编写一个需要调用 pandoc 的网络扩展。我一直将YouTube 下载器作为如何调用外部程序的示例。我查看了有关如何使用nativeMessage 系统的 Web 扩展文档,它坚持需要一个应用程序清单来识别 Web 浏览器和扩展的外部程序。我找不到 YouTube 下载器的应用程序清单;似乎没有使用一个。相反,它通过以下代码段启动了与 FFMPEG(处理将来自主机系统的 YouTube 视频混合在一起的音频视频程序)的连接:

ffmpeg.convert = function(command, args, dictionary) {
  return new Promise((resolve, reject) => {
    args = args.split(/\s/).map(s => {
      Object.keys(dictionary).forEach(key => s = s.replace(key, dictionary[key]));
      return s;
    });
    chrome.runtime.sendNativeMessage('com.add0n.node', {
      cmd: 'exec',
      kill: true,
      command,
      arguments: args
    }, obj => {
      if (!obj || obj.error || (obj.code && obj.code !== 0)) {
        console.error(obj);
        reject(new Error(obj ? obj.error || obj.stderr || obj.stdout : 'error_12'));
      }
      else {
        resolve();
      }
    });
  });
};

FFMPEG 已经安装在我的系统上,所以调用它没有问题。但我找不到 FFMPEG 的应用程序清单将存储在哪里。我什至没有看到在 nativeMessage 系统中调用 FFMPEG 的扩展名,而是调用'com.add0n.node'. 我已经尝试为自己的扩展模仿这个,我收到一条错误消息,说这'com.add0n.node'是未知的。

为我自己的系统设置应用程序清单不是问题。但我希望分享我的网络扩展,而不是期望最终用户需要了解如何管理他们的系统以添加应用程序清单以使网络浏览器知道 pandoc。我希望我的用户需要做的是安装我的网络扩展和 pandoc,而不必了解如何更改他们的配置文件以重新升级网络浏览器。我不确定当人们安装依赖于它们的 Web 扩展时,是否有添加应用程序清单的标准方法。(期望我重新打包 pandoc 以适应我的网络扩展的需求是不合理的。)我不确定 YouTube 下载器如何使用'com.add0n.node'?

标签: javascriptgoogle-chrome-extensionfirefox-addon-webextensionschrome-native-messaging

解决方案


推荐阅读