Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para comunicar com uma aplicação Win32 nativa instalada no dispositivo de um utilizador, uma extensão utiliza uma API semelhante à outra mensagem que transmite APIs. O anfitrião da aplicação nativa envia e recebe mensagens com extensões através da entrada padrão e da saída padrão.
As extensões que utilizam mensagens nativas são instaladas no Microsoft Edge de forma semelhante a qualquer outra extensão. No entanto, as aplicações nativas não são instaladas ou geridas pelo Microsoft Edge.
Para adquirir a extensão e o anfitrião de aplicações nativos, existem dois modelos de distribuição diferentes:
Empacote a extensão e o anfitrião em conjunto. Quando um utilizador instala o pacote, a extensão e o anfitrião são instalados.
Em alternativa, instale a extensão a partir dos Suplementos do Microsoft Edge e a extensão pede aos utilizadores para instalarem o anfitrião.
Para criar a extensão para enviar e receber mensagens com anfitriões de aplicações nativos, siga os seguintes passos.
Passo 1: adicionar permissões ao manifesto da extensão
Adicione a nativeMessaging
permissão ao ficheiro manifest.json da extensão.
Este é o ficheiro de manifesto da extensão, não o ficheiro de manifesto do anfitrião de mensagens nativo, que é abordado em secções posteriores.
Segue-se um exemplo manifest.json ficheiro:
{
"name": "Native Messaging Example",
"version": "1.0",
"manifest_version": 3,
"description": "Send a message to a native app.",
"app": {
"launch": {
"local_path": "main.html"
}
},
"icons": {
"128": "icon-128.png"
},
"permissions": ["nativeMessaging"]
}
Passo 2: Criar o ficheiro de manifesto do anfitrião de mensagens nativo
As aplicações nativas têm de fornecer um ficheiro de manifesto do anfitrião de mensagens nativo. Um ficheiro de manifesto do anfitrião de mensagens nativo contém as seguintes informações:
O caminho para o runtime do anfitrião de mensagens nativo.
O método de comunicação com a extensão.
Uma lista de extensões permitidas às quais comunica.
O browser lê e valida o manifesto do anfitrião de mensagens nativo. O browser não instala nem gere o ficheiro de manifesto do anfitrião de mensagens nativo.
O ficheiro de manifesto do anfitrião de mensagens nativo é diferente do ficheiro V3 ou V2 do Manifesto que faz parte da extensão do Microsoft Edge.
Exemplo de um ficheiro de manifesto do anfitrião de mensagens nativo:
{
"name": "com.my_company.my_app",
"description": "My App",
"path": "C:\\Program Files\\My App\\chrome_native_messaging_host.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
]
}
O ficheiro de manifesto do anfitrião de mensagens nativo tem de ser um ficheiro JSON válido que contenha as seguintes chaves:
Chave | Detalhes |
---|---|
name |
Especifica o nome do anfitrião de mensagens nativo. Os clientes transmitem a cadeia para runtime.connectNative ou runtime.sendNativeMessage .O valor só tem de conter carateres alfanuméricos em minúsculas, carateres de sublinhado e pontos. O valor não pode começar ou terminar com um ponto (um ponto) e um ponto não pode ser seguido por outro ponto. |
description |
Descreve a aplicação. |
path |
Especifica o caminho para o binário do anfitrião de mensagens nativo. Em dispositivos Windows, pode utilizar caminhos relativos para o diretório que contém o ficheiro de manifesto do anfitrião de mensagens nativo. No macOS e Linux, o caminho tem de ser absoluto. O processo de anfitrião começa com o diretório atual definido para o diretório que contém o binário do anfitrião. Por exemplo (Windows), se o parâmetro estiver definido como C:\App\nm_host.exe , o binário é iniciado com o diretório atual (C:\App\ ). |
type |
Especifica o tipo da interface utilizada para comunicar com o anfitrião de mensagens nativo. O valor indica ao Microsoft Edge para utilizar stdin e stdout comunicar com o anfitrião. O único valor aceitável é stdio . |
allowed_origins |
Especifica a lista de extensões que têm acesso ao anfitrião de mensagens nativo. Para ativar a aplicação para identificar e comunicar com uma extensão, no ficheiro de manifesto do anfitrião de mensagens nativo, defina o seguinte valor:"allowed_origins": ["chrome-extension://{microsoft_catalog_extension_id}"] |
Faça sideload da extensão para testar mensagens nativas com o anfitrião. Para fazer sideload da extensão durante o desenvolvimento e obter microsoft_catalog_extension_id
:
Aceda a
edge://extensions
e, em seguida, ative o botão de alternar Modo de programador.Selecione Carregar desembalado e, em seguida, selecione o pacote de extensão para sideload.
Clique em OK.
Aceda à página e verifique se a
edge://extensions
extensão está listada.Copie a chave de
microsoft_catalog_extension_id
(ID) da listagem de extensões na página.
Quando estiver pronto para distribuir a extensão aos utilizadores, publique a extensão nos Suplementos do Microsoft Edge. O ID de extensão da extensão publicada pode ser diferente do ID utilizado durante o sideload da extensão. Se o ID tiver sido alterado, atualize allowed_origins
no ficheiro de manifesto do anfitrião de mensagens nativo com o ID da extensão publicada.
Passo 3: copiar o ficheiro de manifesto do anfitrião de mensagens nativo para o seu sistema
O passo final envolve copiar o ficheiro de manifesto do anfitrião de mensagens nativo para o computador e certificar-se de que este ficheiro de manifesto está configurado corretamente. Para garantir que o ficheiro de manifesto do anfitrião de mensagens nativo é colocado na localização esperada, siga os seguintes passos. A localização varia de acordo com a plataforma.
No Linux e macOS:
- Certifique-se de que fornece permissões de leitura no ficheiro de manifesto do anfitrião de mensagens nativo.
- Certifique-se de que fornece permissões de execução no runtime do anfitrião.
O ficheiro de manifesto do anfitrião de mensagens nativo pode estar localizado em qualquer parte do sistema de ficheiros. O instalador de aplicações tem de criar uma chave de registo e definir o valor predefinido da chave para o caminho completo do ficheiro de manifesto do anfitrião de mensagens nativo.
As seguintes localizações são exemplos de chaves de registo:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Edge\NativeMessagingHosts\com.my_company.my_app
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Edge\NativeMessagingHosts\com.my_company.my_app
Para adicionar uma chave de registo ao diretório com a chave de manifesto, efetue um dos seguintes procedimentos:
Execute um comando na linha de comandos:
REG ADD "HKCU\Software\Microsoft\Edge\NativeMessagingHosts\com.my_company.my_app" /ve /t REG_SZ /d "C:\path\to\nmh-manifest.json" /f
Em alternativa, crie um
.reg
ficheiro e execute-o da seguinte forma:Copie o seguinte comando para um
.reg
ficheiro:Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Edge\NativeMessagingHosts\com.my_company.my_app] @="C:\\path\\to\\nmh-manifest.json"
Execute o
.reg
ficheiro. Se executar o ficheiro criado.reg
como parte de um script de lote, certifique-se de que o executa com uma linha de comandos de administrador.
O Microsoft Edge consulta a HKEY_CURRENT_USER
chave raiz, seguida de HKEY_LOCAL_MACHINE
. Em ambas as chaves, o registo de 32 bits é procurado primeiro e, em seguida, o registo de 64 bits é procurado para identificar anfitriões de mensagens nativos. A chave do registo especifica a localização do ficheiro de manifesto do anfitrião de mensagens nativo.
Se as entradas de registo do Microsoft Edge não tiverem a localização do ficheiro de manifesto do anfitrião de mensagens nativo, as localizações do registo Chromium e chrome são utilizadas como opções de contingência.
Se o Microsoft Edge encontrar a chave de registo em qualquer uma das localizações listadas anteriormente, não consultará as localizações listadas no fragmento de código seguinte.
A ordem de pesquisa das localizações do registo é:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Edge\NativeMessagingHosts\
HKEY_CURRENT_USER\SOFTWARE\Chromium\NativeMessagingHosts\
HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\NativeMessagingHosts\
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Edge\NativeMessagingHosts\
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Chromium\NativeMessagingHosts\
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Google\Chrome\NativeMessagingHosts\
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Edge\NativeMessagingHosts\
HKEY_LOCAL_MACHINE\SOFTWARE\Chromium\NativeMessagingHosts\
HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\
Nó de registo WOW6432Node
O HKEY_CURRENT_USER\SOFTWARE\WOW6432Node
nó de registo não é pesquisado em computadores de 64 bits, devido à forma como o registo funciona nos mesmos. Para obter mais informações, veja Chaves de Registo Afetadas pelas Instalações do Windows que Incluem Suporte do Windows no Windows (WOW) para Arquiteturas de Processador Múltiplas.
IDs de extensão necessários para ambas as lojas
Se tiver uma extensão nos Suplementos do Microsoft Edge e na Chrome Web Store, tem de adicionar os IDs de extensão que correspondem a ambas as lojas no allowed_origins
ficheiro de manifesto do anfitrião de mensagens nativo.
Isto é necessário porque apenas o ficheiro de manifesto do anfitrião de mensagens nativo que corresponde à primeira localização de registo encontrada é lido.
Protocolo de mensagens nativas
O Microsoft Edge inicia cada anfitrião de mensagens nativo num processo separado e comunica com o mesmo através da entrada padrão (stdin
) e da saída padrão (stdout
). O mesmo formato é utilizado para enviar mensagens em ambas as direções; cada mensagem é serializada com JSON, CODIFICADO UTF-8 e é precedida com o comprimento da mensagem de 32 bits por ordem de bytes nativos. O tamanho máximo de uma única mensagem do anfitrião de mensagens nativo é de 1 MB, principalmente para proteger o Microsoft Edge de aplicações nativas que se comportam incorretamente. O tamanho máximo da mensagem enviada para o anfitrião de mensagens nativo é de 4 GB.
O primeiro argumento para o anfitrião de mensagens nativo é a origem do autor da chamada, normalmente chrome-extension://[ID of allowed extension]
. Isto permite que os anfitriões de mensagens nativos identifiquem a origem da mensagem quando são especificadas várias extensões na allowed_origins
chave no manifesto do anfitrião de mensagens nativo. Consulte o Passo 2: Criar o ficheiro de manifesto do anfitrião de mensagens nativo acima.
No Windows, o anfitrião de mensagens nativo também é transmitido um argumento de linha de comandos com uma alça para a janela nativa do Microsoft Edge: --parent-window=<decimal handle value>
. Isto permite que o anfitrião de mensagens nativo crie janelas de IU nativas que são corretamente parentadas. Este valor será 0 se o contexto de chamada for uma função de trabalho de serviço.
Quando uma porta de mensagens é criada com runtime.connectNative
o , o Microsoft Edge inicia um processo de anfitrião de mensagens nativo e mantém-no em execução até que a porta seja destruída. Por outro lado, quando uma mensagem é enviada através runtime.sendNativeMessage
do , sem criar uma porta de mensagens, o Microsoft Edge inicia um novo processo de anfitrião de mensagens nativo para cada mensagem. Nesse caso, a primeira mensagem gerada pelo processo de anfitrião é processada como uma resposta ao pedido original e o Microsoft Edge irá transmiti-la para a chamada de retorno de resposta especificada quando runtime.sendNativeMessage
é chamada. Todas as outras mensagens geradas pelo anfitrião de mensagens nativo nesse caso são ignoradas.
Ligar a uma aplicação nativa
Enviar e receber mensagens de e para uma aplicação nativa é muito semelhante às mensagens entre extensões. A diferença main é que runtime.connectNative
é utilizada em vez de runtime.connect
e runtime.sendNativeMessage
é utilizada em vez de runtime.sendMessage
.
Para utilizar estes métodos, a nativeMessaging
permissão tem de ser declarada no ficheiro de manifesto das extensões; consulte o Passo 1: Adicionar permissões ao manifesto de extensão acima.
Estes métodos não estão disponíveis nos scripts de conteúdo, apenas nas páginas da extensão e na função de trabalho de serviço. Se quiser comunicar a partir de um script de conteúdo para a aplicação nativa, envie a mensagem para a sua função de trabalho de serviço para passá-la para a aplicação nativa.
O exemplo seguinte cria um runtime.Port
objeto que está ligado ao anfitrião com.my_company.my_application
de mensagens nativo, começa a escutar mensagens dessa porta e envia uma mensagem a enviar:
var port = chrome.runtime.connectNative('com.my_company.my_application');
port.onMessage.addListener(function (msg) {
console.log('Received' + msg);
});
port.onDisconnect.addListener(function () {
console.log('Disconnected');
});
port.postMessage({text: 'Hello, my_application'});
Utilize runtime.sendNativeMessage
para enviar uma mensagem para a aplicação nativa sem criar uma porta; por exemplo:
chrome.runtime.sendNativeMessage(
'com.my_company.my_application',
{text: 'Hello'},
function (response) {
console.log('Received ' + response);
}
);
Depurar mensagens nativas
Quando ocorrem determinadas falhas de mensagens nativas, a saída é escrita no registo de erros do Microsoft Edge. Isto inclui quando o anfitrião de mensagens nativo não inicia, escreve stderr
ou viola o protocolo de comunicação. No Linux e macOS, este registo pode ser facilmente acedido iniciando o Microsoft Edge a partir da linha de comandos e observando o respetivo resultado no terminal. No Windows, utilize --enable-logging
como explicado em Como ativar o registo.
Seguem-se alguns erros comuns e sugestões para os resolver:
Falha ao iniciar o anfitrião de mensagens nativo.
Verifique se tem permissões suficientes para executar o ficheiro anfitrião de mensagens nativo.
Foi especificado um nome de anfitrião de mensagens nativo inválido.
Verifique se o nome contém carateres inválidos. Só são permitidos carateres alfanuméricos em minúsculas, carateres de sublinhado e pontos (períodos). Um nome não pode começar ou terminar com um ponto e um ponto não pode ser seguido por outro ponto.
O anfitrião nativo foi encerrado.
O pipe para o anfitrião de mensagens nativo foi quebrado antes de a mensagem ser lida pelo Microsoft Edge. Isto é provavelmente iniciado a partir do seu anfitrião de mensagens nativo.
O anfitrião de mensagens nativo especificado não foi encontrado.
Verificar o seguinte:
O nome está escrito corretamente na extensão e no ficheiro de manifesto?
O manifesto está no diretório correto e com o nome correto? Veja a localização do anfitrião de mensagens nativa para obter os formatos esperados.
O ficheiro de manifesto está no formato correto? Em particular, o JSON é válido e bem formado e os valores correspondem à definição de um manifesto de anfitrião de mensagens nativo, por Passo 2: Criar o ficheiro de manifesto do anfitrião de mensagens nativo acima?
O ficheiro especificado em
path
existe? No Windows, os caminhos podem ser relativos, mas no macOS e Linux, os caminhos têm de ser absolutos.
O nome do anfitrião do anfitrião de mensagens nativo não está registado. (apenas no Windows)
O anfitrião de mensagens nativo não foi encontrado no registo do Windows. Faça duplo marcar utilizando regedit
se a chave foi realmente criada e corresponde ao formato necessário, conforme documentado na localização do anfitrião de mensagens nativa.
O acesso ao anfitrião de mensagens nativo especificado é proibido.
A origem da extensão está listada em allowed_origins
?
Erro ao comunicar com o anfitrião de mensagens nativo.
Isto indica uma implementação incorreta do protocolo de comunicação no anfitrião de mensagens nativo.
Certifique-se de que todos os resultados no
stdout
cumprem o protocolo de mensagens nativo. Se quiser imprimir alguns dados para fins de depuração, escreva emstderr
.Certifique-se de que o comprimento da mensagem de 32 bits está no formato inteiro nativo da plataforma (little-endian ou big-endian).
O comprimento da mensagem não pode exceder 1024*1024.
O tamanho da mensagem tem de ser igual ao número de bytes na mensagem. Isto pode diferir do "comprimento" de uma cadeia, porque os carateres podem ser representados por vários bytes.
Apenas windows: Certifique-se de que o modo de E/S do programa está definido como
O_BINARY
. Por predefinição, o modo de E/S éO_TEXT
, que danifica o formato da mensagem à medida que as quebras de linha (0A
=\n
) são substituídas por terminações de linha estilo Windows ().\r\n
=0D 0A
O modo de E/S pode ser definido com__setmode
.
Observação
Partes desta página são modificações baseadas no trabalho criado e partilhado pela Google e utilizado de acordo com os termos descritos na Licença Internacional Creative Commons Attribution 4.0. A página original encontra-se aqui.
Este trabalho é licenciado ao abrigo de uma Licença Internacional creative Commons Attribution 4.0.