问题标签 [chrome-native-messaging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
346 浏览

jquery - chrome.runtime.onSuspend.addListener 没有触发

我有一个连接到本机消息传递应用程序的 chrome 扩展。当 chrome 扩展程序暂停时,我需要进行一些清理。我正在尝试使用 chrome.runtime.onSuspend.addListener 但它不起作用。这是我的代码:-

清单.json

背景.js

0 投票
0 回答
90 浏览

c++ - readdir、Windows 和 Chrome 应用程序原生消息传递的奇怪错误

我似乎遇到了一个奇怪的错误,我已将其范围缩小为在 Windows 7 和 8 中 readdir() 失败(并且永远不会返回),但仅在与 Chrome 应用程序的本机消息一起使用时,并且仅在随机但具体数量的文件在目录中。相关的 C++ 代码是:

当作为控制台应用程序的一部分时,它可以正常工作,并且在大多数情况下,当可执行文件的一部分从 Chrome 打包应用程序接收本机消息时,它可以正常工作 - 它获取并返回一个文本字符串,其中包含目录中的所有文件名,由分隔“|”。

我在我的 Chrome 应用程序中编写了一个测试,在两次试验之间一次添加一个文件。它可以工作多次,但每次添加一些文件后都会失败。例如,如果目录包含文件 Tryc_3.txt、Tryc_4.txt、Tryc_5.txt ... Tryc_65.txt(每个都包含文本“test”),那么目录列表就可以正常工作。如果我然后添加 Tryc_66.txt 它会失败,在 readdir(pdir)。

我尝试了不同的文件名和目录,结果相同,但失败发生在其他数量的文件上。我尝试过 FindFirstFile、FindNextFile 和 FindClose,结果完全相同。我尝试用 Wow64DisableWow64FsRedirection 和 Wow64RevertWow64FsRedirection 包装整个事情,结果完全相同。(我试过 readdir_r 但无法编译它,有些网站似乎说这在 Windows 中不可用)。

我没有想法,很高兴听到任何人的任何线索或猜测。

我可以提供完整的代码,包括 Chrome 应用程序,但即使在我尽可能多地削减之后它也相当大。

为什么目录列表仅在与 Native Messaging 一起使用时才会失败?

0 投票
1 回答
2187 浏览

c# - Chrome 原生消息

我正在研究“ Chrome Native Messaging ”的示例应用程序。我按照网站上提到的步骤完成了所有设置。我也可以运行应用程序,但是我没有从本机应用程序收到响应消息。当我第一次开始扩展时,我会收到响应消息。

从这里下载的样本

当我从浏览器本机应用程序发送消息没有响应时,请检查下图

在此处输入图像描述

C#代码如下

manifest.json如下

有些地方我觉得我们没有收到来自本机主机的响应,因为我已经在浏览器中的以下代码中添加了调试点,这些代码没有被命中

appendMessage("收到的消息:" + JSON.stringify(message) + " "); }

我错过了什么吗?

0 投票
1 回答
8263 浏览

c# - 用 C# 编写的从 chrome 扩展到本机主机的本机消息传递

我正在尝试通过本机消息接收来自我的 chrome 扩展程序的消息。popup.html控制台指示正在发送消息,但我的主机由于某种原因没有收到它。我可以看到主机native.exe正在任务管理器中启动,但主机没有收到发送的数据。

popup.js

现在,当我从 Chrome 扩展程序发送消息时,我可以看到控制台日志popup.html并且消息是正确的。

我尝试使用来自Native Messaging Chrome的一些有人声称已经工作的代码来测试所有内容。具体来说,我有

本机程序

我仍在尝试围绕 nativeMessaging 进行思考,但是由于我可以看到通过控制台日志发送的消息,因此我不得不假设错误出在我的.exe. 我已经创建了注册表项 HKCU,并创建了主机manifest.json文件。由于扩展程序正在启动.exe,我很确定所有这些都可以正常工作。

如果有人可以为此提供一些帮助,那将不胜感激。谢谢!


编辑:在完全没有改变之后,我无法native.exe从我的扩展程序中启动。为了解决这个问题,我尝试重写我的发件人以不打开端口:

这也根本行不通。我不知道我做错了什么,也不知道为什么.exe当我从我的扩展程序发送消息时我的主机停止启动。


编辑#2

好消息!

我删除了我的注册表项,然后再次将其添加到本地计算机注册表(即 HKLM)中。同样,我使用来自Native Messaging Chrome的代码从我的主机发送和接收。现在,当我查看我的扩展程序的日志时,我可以看到来自我的主机的正确响应。我通过简单地调用来使用“no-port”方法chrome.runtime.sendNativeMessage(...),这对我的目的来说很好。不幸的是,我没有收到从分机到主机的消息。此外,host.exe即使在收到消息后,我也不会退出。我不知道为什么,但如果有人可以提供帮助,我将不胜感激。

在我的主机中,我试图将传入消息写入文件只是为了测试我是否收到了消息:

注意:我从扩展程序传递到主机的消息大约是 250KB(它因消息而异)。

问题是:

  1. 没有任何内容写入文件。它完全是空白的。
  2. 该文件需要很长时间才能创建(约 4 秒)。
  3. 我的host.exe实例永远不会终止。它仍在运行(我可以在任务管理器中查看)。
0 投票
1 回答
3743 浏览

c# - 将“大量”数据从 Chrome 扩展程序传递到主机非常慢(用 C# 编写)

我正在使用 Chrome 的Native Messaging API将页面的 DOM 传递给我的主机。当我尝试将一个小字符串从我的扩展程序传递到我的主机时,一切正常,但是当我尝试传递整个 DOM(不是那么大......只有大约 260KB)时,一切都运行得慢得多,我最终得到一个Native host has exited error阻止主机响应。

我的主要问题:为什么将 250KB - 350KB 的消息从扩展程序传递到主机需要这么长时间?

根据开发者的网站

Chrome 在单独的进程中启动每个本机消息传递主机,并使用标准输入 (stdin) 和标准输出 (stdout) 与其通信。相同的格式用于双向发送消息:每条消息都使用 JSON 序列化,UTF-8 编码,并以原生字节顺序的 32 位消息长度开头。来自原生消息传递主机的单个消息的最大大小为 1 MB,主要是为了保护 Chrome 免受行为不端的原生应用程序的影响。发送到本机消息传递主机的消息的最大大小为 4 GB。

我有兴趣发送到我的主机的页面的 DOM 不超过 260KB(有时是 300KB),远低于 4GB 的最大值。

popup.js

主机程序

请注意,我从这个问题中找到了上述方法。

目前,我只是想将字符串写入 .txt 文件:

  1. 将字符串写入文件需要很长时间(约 4 秒,有时长达 10 秒)。
  2. 实际写入的文本量各不相同,但绝不是顶部文档声明和一些 IE 注释标记。现在所有文本都显示出来了。
  3. 这个几乎没有任何文本的文件是 649KB,但实际文件应该只有 205KB(当我下载它时)。该文件仍略大于应有的大小(应为 205KB 时为 216KB)。

我已经getDOM.js通过下载文件测试了我的功能,整个过程几乎是瞬间完成的。

我不确定为什么这个过程要花这么长时间,为什么文件这么大,或者为什么实际上几乎没有任何消息被发送。

我不确定这是否与以特定方式反序列化消息有关,我是否应该创建一个端口而不是使用该chrome.runtime.sendNativeMessage(...);方法,或者我是否完全缺少其他东西。

非常感谢所有帮助!谢谢!


编辑

虽然我的消息正确地从分机发送到主机,但我现在Native host has exited error在分机接收主机消息之前收到一条消息。

0 投票
1 回答
702 浏览

javascript - 在 Chrome 扩展程序中使用 connectNative() 连接到本机主机应用程序时,导致“连接到本机应用程序时出错”的原因是什么?

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

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

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

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

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

0 投票
2 回答
5998 浏览

javascript - Chrome 原生消息传递 - 为什么我会收到“未找到指定的原生消息传递主机”错误?

根据 Chrome Native Messaging 文档,对 connectNative() 的成功调用会返回一个端口,您可以使用该端口将消息发布到本机应用程序(Mac 应用程序)。在我的例子中, nativeConnect() 确实返回了一个有效的端口,但是对 onDisconnected() 监听器的调用几乎立即被触发。每当触发侦听器时,它都会将“lastError”属性打印到浏览器的控制台,这给出:

为什么要这样做?产生 msg 的监听器如下所示:

文档底部有一个关于此特定错误的完整部分(Native Messaging),建议的补救措施是清单文件的命名、放置或定义(JSON)不正确,或者主机应用程序未命名或未定位清单说应该在哪里。该文档说 connectNative() 将“在单独的进程中启动主机”,但 Activity Monitor 没有提供任何证据表明本机主机应用程序已启动。

我调用 connectNative() 如下:

根据文档,我的本机主机清单文件位于正确的文件夹中,解析为 JSON,如下所示:

Chrome 扩展程序也需要一个清单,在我获得权限部分之前,我无法从 connectNative() 获取非空端口,所以我很确定现在这是正确的:

更新:

弄清楚如何从 Mac 的终端启动 Chrome 浏览器,并带有允许查看更多“详细”日志记录的标志。然后,当我运行一些东西时,我注意到了这个输出:

很明显它找不到主机清单,但是为什么?

0 投票
0 回答
965 浏览

javascript - Python 中的 Chrome 原生消息传递

我正在尝试在 Python 中使用 chrome 应用程序实现本机消息传递,但不使用 Tkinter(在 [官方示例] 中使用)1

所以本质上我的问题是:是否可以将 chrome js 应用程序连接到在终端中运行的 python 脚本?如何?

有任何想法吗?

非常感谢。

0 投票
3 回答
12041 浏览

javascript - 如何修复 Chrome 浏览器扩展中的 Native Host Has Exited 错误 -- Native Messaging

如何修复我的 Mac 版 Chrome 浏览器扩展中的“本机主机已退出”错误?Native Messaging上的文档在底部特别提到了这个错误,并提出了一个可能的原因,但它的表述很笼统(“这很可能是从你的本地消息传递主机启动的”),并且不清楚要尝试做什么来解决这个。

终端中的日志输出(如果您从 Mac 终端启动 Chrome,则可以查看日志信息)使我相信本机主机应用程序的进程本身从未成功启动。我不断得到:

但是,在后台 javascript 页面的控制台上打印“Native host has exited”的实际代码是:

onDisconnected() 侦听器实际上是调用 connectNative() 的结果,我根据文档在此处完成了此操作:

我知道 connectNative() 在某种程度上成功,因为它返回了一个有效的端口。但是,connectNative() 继续尝试定位本机主机应用程序并尝试启动它。文档表明主机应用程序是罪魁祸首,以某种方式启动了 Chrome 和本机应用程序之间的“管道”中断,尽管我的主机应用程序根本没有实现与 stdout 或 stdin 的通信。此外,Chrome 日志消息(“LaunchProcess: failed to execvp:”)似乎表明我的 Mac 应用程序甚至从未成功启动。

还有更多:我在网上找到的一些源代码(可能是过时的?源文件)揭示了这个“本机主机已退出”消息的确切来源,并且检查表明为什么 Google Chrome 的代码正在关闭。在 HandleReadResult() 中,调用 Close() 提供非常消息,然后关闭事物以响应 Posix read() 返回 0。但是在广泛的体育世界中,我做错了什么(或根本不做)在我的 Mac 应用程序中导致读取失败?我的 Mac 应用程序没有向标准输出写入任何内容,那么 not-writing-anything 是如何导致读取错误的?还是所有这些都在误导我,而 execvp 未能启动我的主机应用程序是更深层次的原因?如果是这样,为什么?这是一个简单的、准系统的 Mac 应用程序。

0 投票
0 回答
30 浏览

google-chrome-extension - chrome 扩展程序和本机消息传递主机之间的安全数据传输

Chrome 扩展程序和 Native 消息传递主机之间的数据交换通过 std io 发生。

问题 :

  • 这种数据传输的安全性如何?
  • 有没有办法进行这种数据传输的中间人攻击?