2014-01-24 6 views
0

Я пытаюсь использовать API для собственных сообщений Chrome для расширения Chrome.Родное приложение не работает в расширении Chrome

manifest.json для родного приложения:

{ 
    "name": "app.native", 
    "description": "Native Message API Test.", 
    "path": "native.exe", 
    "type": "stdio", 
    "allowed_origins": ["chrome-extension://kembignchdjhopkkcolnamikcenaocdm/"] 
} 

реестра Windows Значение:

HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\app.native=D:\connectNative\manifest.json 

Я также попытался D:\\\\connectNative\\\\manifest.json

И я добавить "nativeMessaging" на "права" в Расширение Chrome manifest.json.

Собственное приложение каст:

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int main(int argc, char* argv[]) { 
    string input = ""; 
    string message="{\"text\": \"This is a response message\",\"num\": \"three\"}"; 
    unsigned int len = message.length(); 
    cout << char(((len>>0) & 0xFF)) 
     << char(((len>>8) & 0xFF)) 
     << char(((len>>16) & 0xFF)) 
     << char(((len>>24) & 0xFF)); 
    cout << message <<endl; 
    getline(cin, input); 
    cout << "You entered: " << input << endl; 
    ofstream myfile; 
    myfile.open ("example.txt"); 
    myfile << "Writing this to a file.\n"; 
    myfile << input; 
    myfile.close(); 

    return 0; 
} 

В конце концов делается, я стараюсь в моем расширение Chrome:

var testport = chrome.runtime.connectNative('app.native'); 
testport.onMessage.addListener(function(msg) { 
    console.log("Received" + msg); 
}); 
testport.onDisconnect.addListener(function() { 
    console.log("Disconnected"); 
}); 

Он не может получить любое сообщение и всегда печатать "Отключено".

Я пытаюсь подключиться к несуществующему приложению, оно по-прежнему печатает «Отключено», поэтому я знаю, что это родное приложение не настроено правильно.

Может ли кто-нибудь указать, что не так или что я пропустил?

+0

Вы не сказали, где native.exe находится. Это в D: \ connectNative \ native.exe? – sowbug

+0

Да, я стараюсь как относительный, так и абсолютный путь native.exe, оба не работают. –

+2

Я думаю, что проблема связана с регистрацией: это мое .reg-файл: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE \ SOFTWARE \ Google \ Chrome \ NativeMessagingHosts \ com.windows.screen] @ = "C: \\ Пользователи \\ abc \\ Desktop \\ Chrome Extension \\ manifest.json " – rohitvk

ответ

-1

Пример рабочего скрипта с исходной ссылкой. Обратите внимание на Разрешения для nativeMessaging и прямую ссылку на внешний ресурс в Manifest.json, эта ссылка позже приведена в сценарии .js.

{ 
    "background": { 
     "scripts": [ "common.js", "filler.js", "background.js" ] 
    }, 
    "browser_action": { 
     "default_icon": "r.png", 
     "default_title": "Click this button to show commands" 
    }, 
    "content_scripts": [ { 
     "all_frames": true, 
     "js": [ "common.js", "content.js", "filler.js" ], 
     "matches": [ "http://*/*", "https://*/*", "file:///*" ], 
     "run_at": "document_start" 
    } ], 
    "description": "For Google Chrome", 
    "homepage_url": "http://www.app.com", 
    "icons": { 
     "128": "r.png", 
     "16": "r.png", 
     "32": "r.png", 
     "48": "r.png" 
    }, 
    "key": "???", 
    "manifest_version": 2, 
    "name": "???", 
    "options_page": "options.html", 
    "permissions": [ "tabs", "bookmarks", "webRequest", "webRequestBlocking", "nativeMessaging", "downloads", "http://*/*", "https://*/*" ], 
    "update_url": "https://clients2.google.com/???/", 
    "version": "???" 
} 
1

По умолчанию cout - это текстовый поток, отправляющий нуль (что происходит как часть вашего размера в первые 4 байта) заканчивает ваш текстовый поток раньше.

В Windows вы можете обновить соиЬ бинарным путем изменения, лежащий в основе стандартного вывода, и не забудьте очистить ...

_setmode(_fileno(stdout), _O_BINARY); 
int len = msg.length(); 
std::cout << char(len >> 0) 
    << char(len >> 8) 
    << char(len >> 16) 
    << char(len >> 24); 

std::cout << msg << std::flush; 

 Смежные вопросы

  • Нет связанных вопросов^_^