Chrome何时将--parent-window的非0值传递给本机消息传递主机?

时间:2019-06-11 12:49:05

标签: google-chrome google-chrome-extension chromium

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

According to the Native Messaging Protocol它说

  

在Windows上,本机消息传递主机也通过命令行传递   参数带有调用chrome本机窗口的句柄:   --parent-window =。这样,本机消息传递主机可以创建正确聚焦的本机UI窗口。

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

This Chromium Bug appears to be my issue,但由于无法修复而被关闭。

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

5月7日,我认为对铬有一点了解的作家说

  

还没有尝试过,但是您可以在   内容脚本吗?听起来像--parent-window arg可能是   在这种情况下很有用。

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

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。简而言之,如果您是Windows开发人员,它将无法正常工作。注释2可能对Chromium上的“ Wont Fix”问题有所帮助。

Comment 2 seems to explain when it might work.

  

如果您正在使用本机消息传递   (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。