javascript - 在 Chrome 扩展程序中使用 connectNative() 连接到 native 主机应用程序时,导致 "Error connecting to native app"的原因是什么?

标签 javascript google-chrome google-chrome-extension chrome-native-messaging

我正在使用 Chrome 的本地消息传递功能在网页和 Mac 应用程序之间实现通信。一切似乎都很顺利,直到我对 chrome.runtime.connectNative("my_native_host_app_name") 进行 javascript 调用,这在控制台中产生了以下错误:

Error in event handler for runtime.onMessageExternal: Error connecting to native app: com.allinlearning.nmhforbrowserextension
Stack trace: Error: Error connecting to native app: com.allinlearning.nmhforbrowserextension
    at Object.<anonymous> (extensions::runtime:189:11)
    at Function.target.(anonymous function) (extensions::SafeBuiltins:19:14)
    at Object.handleRequest (extensions::binding:55:27)
    at Function.target.(anonymous function) (extensions::SafeBuiltins:19:14)
    at Object.<anonymous> (extensions::binding:318:32)
    at chrome-extension://gldheanjpgopipommeingjlnoiamdfol/background.js:19:27
    at Function.target.(anonymous function) (extensions::SafeBuiltins:19:14)
    at EventImpl.dispatchToListener (extensions::event_bindings:395:22)
    at Function.target.(anonymous function) (extensions::SafeBuiltins:19:14)
    at Event.$Array.forEach.publicClass.(anonymous function) [as dispatchToListener] (extensions::utils:65:26) extensions::event_bindings:383
EventImpl.dispatch_extensions::event_bindings:383
EventImpl.dispatchextensions::event_bindings:401
$Array.forEach.publicClass.(anonymous function)extensions::utils:65
messageListenerextensions::messaging:190
EventImpl.dispatchToListenerextensions::event_bindings:395
$Array.forEach.publicClass.(anonymous function)extensions::utils:65
EventImpl.dispatch_extensions::event_bindings:378
EventImpl.dispatchextensions::event_bindings:401
$Array.forEach.publicClass.(anonymous function)extensions::utils:65
dispatchOnMessageextensions::messaging:304

似乎导致此错误的实际调用(堆栈跟踪中对 background.js 的引用中的第 19 行)是:

port = chrome.runtime.connectNative("com.nmhforbrowserextension");

为了提供更多上下文,它是从监听器调用的:

chrome.runtime.onMessageExternal.addListener(

  function(request, sender, sendResponse) {
    //var imgdata = JSON.stringify(request.imgdata);
    //process it somehow here

    port = chrome.runtime.connectNative("com.allinlearning.nmhforbrowserextension");

    if (port)
       console.log("connectNative() returned a non-null port");
    else
       console.log("connectNative() returned null for the port");
});

它永远不会到达 if 语句。我主要使用的文档是 Chrome Native Messaging .在文档的底部,它有一个部分提供常见错误的帮助 Debugging native messaging .我似乎无法将“连接到 native 应用程序时出错”与任何特别提到的错误联系起来。

我的扩展 list 文件(“manifest.json”)的完整内容是:

{
  "manifest_version": 2,

    "name": "AIL Extension",
    "version": "1.0",
    "description": "New Reader",

    "background": {
        "scripts": ["background.js"]
     },

    "externally_connectable": {
    // Extension and app IDs. If this field is not specified, no
    // extensions or apps can connect.
    "ids": [
      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    ],
    // Match patterns for web pages. Does not affect content scripts.
    // If this field is not specified, no webpages can connect.
    "matches": [
      "http://localhost/charles/qrexttest/*"
    ],

     "permissions": [
                   "nativeMessaging",
                    "tabs",
                    "activeTab",
                    "background",
                    "http://*/", "https://*/"
                    ],

    // Indicates that the extension would like to make use of the TLS
    // channel ID of the web page connecting to it. The web page must
    // also opt to send the TLS channel ID to the extension via setting
    // includeTlsChannelId to true in runtime.connect's connectInfo
    // or runtime.sendMessage's options.
    "accepts_tls_channel_id": false
  }
}

最佳答案

“连接到 native 应用程序时出错:[ native 消息传递主机 ID]”的可能原因之一是缺少所需的 nativeMessaging 权限。

Declare list 文件中的 "nativeMessaging" 权限,重新加载扩展并重试。

(chrome.runtime.connectNativesendNativeMessage 无需此许可 is a bug 即可使用。)

关于javascript - 在 Chrome 扩展程序中使用 connectNative() 连接到 native 主机应用程序时,导致 "Error connecting to native app"的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712860/

相关文章:

javascript - 拒绝在 chrome 中获取不安全的 header "Location",在 firefox 中没有内容

javascript - 如何设计类 Bill 和类 SimplifiedBill 之间的关系?

html - Chrome 错误 : css positioning incorrectly resizing container

javascript - 带有 xml DOM 的 Chrome getElementsByTagName() 返回不正确的 NodeList

javascript - 如何在 Chrome 本地存储中存储 Set 对象

google-chrome-extension - 为什么 Chrome 不会使用允许本地主机的内容安全策略加载扩展程序?

javascript - 在 Chrome 上保存和恢复设置

javascript - 如果值包含则插入数组

javascript - 我需要将文本框名称传递到 AngularS 路由页面吗?

javascript - 我的函数使用关联数组(dom 对象)和 for 循环时出现问题