Когда Chrome передает значение, отличное от 0, собственному узлу обмена сообщениями для --parent-window? - PullRequest
0 голосов
/ 11 июня 2019

Я разрабатываю расширение Chrome для Windows.Он также имеет собственный хост обмена сообщениями.Аргумент, передаваемый хосту с именем --parent-window, в моем случае всегда равен 0.

В соответствии с протоколом обмена сообщениями он говорит

в Windows, собственному хосту обмена сообщениями также передается аргумент командной строки с дескриптором в собственное окно вызывающего chrome: --parent-window =.Это позволяет собственному узлу обмена сообщениями создавать собственные окна пользовательского интерфейса, которые правильно сфокусированы.

Я открываю свой порт для собственного обмена сообщениями в фоновом режиме JS.Насколько я понимаю, вы не можете использовать этот API в контенте.

Эта ошибка в Chromium, по-видимому, является моей проблемой , но она была закрыта как исправление.

Итаккогда или при каких обстоятельствах Chrome отправляет что-то полезное с окном --parent?

Далее 7 мая писатель, который, я полагаю, немного знает о хроме, говорит:

Haven 'не пробовал, но не могли бы вы вместо этого открыть свой собственный порт сообщений в скрипте контента?Похоже, в этом случае может быть полезен аргумент --parent-window.

Что он имеет в виду и как мне это сделать?

1 Ответ

0 голосов
/ 13 июня 2019

Отвечая на мой собственный вопрос.Короче говоря, это не работает так, как вы ожидаете, если вы являетесь разработчиком Windows.Возможно, комментарий 2 поможет из проблемы «Исправить ошибки» в Chromium.

Кажется, что комментарий 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", вы можете позвонитьFindWindowEX с классом "Chrome_WidgetWin_1" и заголовком, чтобы получить основной дескриптор Google.

...