首页 > 解决方案 > Chrome 何时将 0 以外的值传递给 --parent-window 的本机消息传递主机?

问题描述

我正在 Windows 上开发 Chrome 扩展程序。它还有一个本地消息传递主机。传递给名为 --parent-window 的主机的参数在我的情况下始终为 0。

根据本机消息传递协议,它说

在 Windows 上,本机消息传递主机还传递了一个命令行参数,其中包含调用 chrome 本机窗口的句柄:--parent-window=。这使本机消息传递主机可以创建正确聚焦的本机 UI 窗口。

我在后台 JS 中打开本地消息传递端口。我的理解是您不能在内容中使用此 API。

这个 Chromium Bug 似乎是我的问题,但由于无法修复而被关闭。

那么 Chrome 何时或在什么情况下通过 --parent-window 发送有用的东西?

5 月 7 日,我认为对铬有所了解的作者说

还没有尝试过,但是您可以在内容脚本中打开您的本机消息传递端口吗?听起来 --parent-window 参数在这种情况下可能很有用。

他是什么意思,我该怎么做?

标签: google-chromegoogle-chrome-extensionchromium

解决方案


回答我自己的问题。简而言之,如果您是 Windows 开发人员,它不会像您期望的那样工作。可能评论 2 有助于 Chromium 上的“Wont Fix”问题。

评论 2 似乎解释了它何时可能起作用。

如果您使用的是本机消息传递 ( https://developer.chrome.com/extensions/messaging#native-messaging ),那么 --parent-window 命令行参数似乎可以提供解决方案。不幸的是,如果本地消息连接是从背景页面建立的,则为父窗口传递零,并且(显然)如果本地消息连接是从浏览器操作弹出窗口建立的,则传递瞬态弹出窗口的 HWND。而且我不允许从内容脚本调用 chrome.runtime.connectNative() 。因此,至少在我的扩展中, --parent-window 没有帮助。

我的解决方案是紧随其后

port = chrome.runtime.connectNative('myspecial.host.application');

然后我使用以下内容;

chrome.tabs.query({ active: true, currentWindow: true }, function (tab) {
        console.log(tab[0].title);
        port.postMessage({ MessageType: 'chromeTitle', Message: tab[0].title });
    });

在您的主机中,如果您添加到此标题“-Google Chrome”,那么您可以使用类“Chrome_WidgetWin_1”和标题调用 FindWindowEX,以获取 Google 的主句柄。


推荐阅读