Расширение 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

665   1  

1 ответ:

Непосредственная проблема заключается в том, что вы неправильно выполняете пример кода. Более серьезная проблема заключается в том, что Google не предоставил исчерпывающей документации о том, как использовать этот пример кода.

Пример собственного обмена сообщениями, на который вы ссылались, содержит только ссылки на пример кода для расширения Chrome. После поиска я смог найти соответствующий пример кода для собственного хост-приложения обмена сообщениями. Чтобы получить пример кода для расширения Chrome и собственного узла обмена сообщениями приложение вместе вы захотите скачать nativeMessaging.zip . В этом zip-файле вы также найдете краткие инструкции по установке собственного хоста обмена сообщениями на Windows, Linux и Mac OS X. Я скажу вам прямо сейчас, что инструкции являются неполными, поскольку они не говорят вам, как установить расширение Chrome. Кроме того, скрипты для установки и удаления собственного узла обмена сообщениями не работают как есть в OS X. Ниже приведены инструкции по установке и исправленные сценарии.

Как установить пример расширения и собственного хост-приложения

  1. Загрузите и распакуйте nativeMessaging.сжатый файл.
  2. установите расширение Chrome
    1. в Chrome введите chrome://extensions/ в адресную строку
    2. Нажмите кнопку " Загрузить распакованное расширение..."кнопка
    3. перейдите в разархивированный Каталог nativeMessaging и выберите каталог app для импорта
  3. установка собственного узла обмена сообщениями приложение
    1. для OS X и Linux вам нужно будет добавить разрешение execute к некоторым файлам. Выполните команду: chmod a+rx nativeMessaging/host/install_host.sh nativeMessaging/host/native-messaging-example-host nativeMessaging/host/uninstall_host.sh
    2. для OS X вам нужно будет исправить некоторые ошибки в nativeMessaging/host/install_host.sh и nativeMessaging/host/uninstall_host.sh. Ниже приведены исправленные сценарии.
    3. для OS X, Linux и Windows следуйте инструкциям в nativeMessaging/README.txt
  4. запустите расширение Chrome
    1. в Chrome введите chrome://apps/ в адресную строку
    2. нажмите на иконку приложения Native Messaging Example
    3. после приложение загружается Вы должны увидеть одну кнопку с именем " 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

    Ничего не найдено.