Расширение Chrome NativeMessaging 'connectNative' undefined
Я пытаюсь реализовать расширение chrome с помощью runtime.connectNative и postMessage. Я следую документации chrome, скачал пример native messaging, который я пытаюсь запустить без каких-либо изменений, в то время как код для собственного хост-приложения можно найти здесь.
Тем не менее, я получаю ошибку:
Uncaught TypeError: не удается прочитать свойство 'connectNative' из undefined.
Ошибка запускается из javascript файл расширения, в этой строке:
порт = хром.во время выполнения.connectNative (имя хоста);
В то время как расширение загружается из манифеста следующим образом:
"app": {
"launch": {
"local_path": "main.html"
}
}
Есть идеи, как решить эту проблему, пожалуйста?
Chrome версии 34, протестирован на windows 7, 8.1
1 ответ:
Непосредственная проблема заключается в том, что вы неправильно выполняете пример кода. Более серьезная проблема заключается в том, что Google не предоставил исчерпывающей документации о том, как использовать этот пример кода.
Пример собственного обмена сообщениями, на который вы ссылались, содержит только ссылки на пример кода для расширения Chrome. После поиска я смог найти соответствующий пример кода для собственного хост-приложения обмена сообщениями. Чтобы получить пример кода для расширения Chrome и собственного узла обмена сообщениями приложение вместе вы захотите скачать nativeMessaging.zip . В этом zip-файле вы также найдете краткие инструкции по установке собственного хоста обмена сообщениями на Windows, Linux и Mac OS X. Я скажу вам прямо сейчас, что инструкции являются неполными, поскольку они не говорят вам, как установить расширение Chrome. Кроме того, скрипты для установки и удаления собственного узла обмена сообщениями не работают как есть в OS X. Ниже приведены инструкции по установке и исправленные сценарии.
Как установить пример расширения и собственного хост-приложения
- Загрузите и распакуйте nativeMessaging.сжатый файл.
- установите расширение Chrome
- в Chrome введите
chrome://extensions/в адресную строку- Нажмите кнопку " Загрузить распакованное расширение..."кнопка
- перейдите в разархивированный Каталог
nativeMessagingи выберите каталогappдля импорта- установка собственного узла обмена сообщениями приложение
- для OS X и Linux вам нужно будет добавить разрешение execute к некоторым файлам. Выполните команду:
chmod a+rx nativeMessaging/host/install_host.sh nativeMessaging/host/native-messaging-example-host nativeMessaging/host/uninstall_host.sh- для OS X вам нужно будет исправить некоторые ошибки в
nativeMessaging/host/install_host.shиnativeMessaging/host/uninstall_host.sh. Ниже приведены исправленные сценарии.- для OS X, Linux и Windows следуйте инструкциям в
nativeMessaging/README.txt- запустите расширение Chrome
- в Chrome введите
chrome://apps/в адресную строку- нажмите на иконку приложения Native Messaging Example
- после приложение загружается Вы должны увидеть одну кнопку с именем " Connect."Нажмите эту кнопку, и вы увидите, как автоматически запускается собственное приложение узла обмена сообщениями.
Исправлено
nativeMessaging/host/install_host.sh#!/bin/sh # Copyright 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. set -e DIR="$( cd "$( dirname "$0" )" && pwd )" if [ $(uname -s) == 'Darwin' ]; then if [ "$(whoami)" == "root" ]; then TARGET_DIR="/Library/Google/Chrome/NativeMessagingHosts" else TARGET_DIR="$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts" fi else if [ "$(whoami)" == "root" ]; then TARGET_DIR="/etc/opt/chrome/native-messaging-hosts" else TARGET_DIR="$HOME/.config/google-chrome/NativeMessagingHosts" fi fi HOST_NAME=com.google.chrome.example.echo # Create directory to store native messaging host. mkdir -p "$TARGET_DIR" # Copy native messaging host manifest. cp "$DIR/$HOST_NAME.json" "$TARGET_DIR" # Update host path in the manifest. HOST_PATH="$DIR/native-messaging-example-host" ESCAPED_HOST_PATH=${HOST_PATH////\\/} sed -i -e "s/HOST_PATH/$ESCAPED_HOST_PATH/" "$TARGET_DIR/$HOST_NAME.json" # Set permissions for the manifest so that all users can read it. chmod o+r "$TARGET_DIR/$HOST_NAME.json" echo Native messaging host $HOST_NAME has been installed.Исправлено
nativeMessaging/host/uninstall_host.sh#!/bin/sh # Copyright 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. set -e if [ $(uname -s) == 'Darwin' ]; then if [ "$(whoami)" == "root" ]; then TARGET_DIR="/Library/Google/Chrome/NativeMessagingHosts" else TARGET_DIR="$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts" fi else if [ "$(whoami)" == "root" ]; then TARGET_DIR="/etc/opt/chrome/native-messaging-hosts" else TARGET_DIR="$HOME/.config/google-chrome/NativeMessagingHosts" fi fi HOST_NAME=com.google.chrome.example.echo rm "$TARGET_DIR/com.google.chrome.example.echo.json" echo Native messaging host $HOST_NAME has been uninstalled.
Comments