Tutun2014 Ответов: 2

Получение сообщения в C# из расширения Chrome через собственный обмен сообщениями


Я пытаюсь получить активный заголовок вкладки, а также URL-адрес из Google Chrome. Я установил расширение Chrome вручную и создал консольное приложение для получения заголовка активной вкладки и url-адреса.

Прежде всего, я установил расширение Chrome, которое содержит файл, такой как manifest.json, background.js и popup.html-да. Ниже приведен мой код.

background.js

var port = chrome.runtime.connectNative('com.example.native');
  
function onActivate(activeInfo) 
{
     chrome.tabs.get(activeInfo.tabId, MyCurrentTab);
}   
function getUrl(title, url)
{
    var o = { title: title, url: url };
    try 
    {       
        port.postMessage(o);
    }
    catch(err)
    {

         port = chrome.runtime.connectNative('com.example.native');
         port.postMessage(o);
    }       
}

function MyCurrentTab(tab) 
{
     getUrl( tab.title, tab.url );
}

chrome.tabs.onActivated.addListener(onActivate);


манифест.в JSON

{
"имя": "watchURL",
"описание": "значение активной кром адрес",
"версия": "2.0",
"разрешения": [
"вкладки",
"nativeMessaging"
],
"фон": {
"скрипты": ["background.js"],
"настойчивый": ложь
},
"browser_action": {
"default_title": "активный url читается",
"default_popup": "popup.html"

},
"manifest_version": 2
}


Затем я создал файл host native json для собственного обмена сообщениями. Ниже приведен код.

{
"имя": "com.example.native",
"описание": "встроенная поддержка расширения Chrome",
"путь": "ChromeExt.exe",
"тип": "stdio",
"allowed_origins": [
"chrome-расширение://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/"
]
}


После этого я создал запись реестра для собственных сообщений с тем же именем (com.example.native).

Ниже приведен код консольного приложения C# ,

private static string OpenStandardStreamIn()
{
    //// We need to read first 4 bytes for length information
    Stream stdin = Console.OpenStandardInput();
    int length = 0;
    byte[] bytes = new byte[4];
    stdin.Read(bytes, 0, 4);
    length = System.BitConverter.ToInt32(bytes, 0);

    string input = "";
    for (int i = 0; i < length; i++)
    {
        input += (char)stdin.ReadByte();
    }

    return input;
}


Я сохранил файл Native host json и файл C# application .exe в папке system32. Но когда я собираюсь открыть www.google.com или тогда www.yahoo.com в браузере chrome ничего не происходит. Я также написал код для дампа файла внутри этого приложения C# , но безуспешно.

Я опубликую свое расширение позже в google store, как только оно будет успешно выполнено вручную.

Теперь мой вопрос заключается в том, как мне нужно выполнить это консольное приложение и получить заголовок и URL-адрес из расширения Chrome.

Что мне теперь делать? Пожалуйста, помогите мне в этом отношении.

Любая помощь будет высоко оценена.

BillWoodruff

- То, что я должен сделать сейчас." Я бы определенно провел некоторое время на форумах разработчиков Google/Chrome: очень вероятно, что у кого-то еще была такая же проблема.

Tutun2014

Я сделал это только после того, как проследовал по ссылкам форума и заметкам разработчика расширения Chrome. Поскольку я не являюсь экспертом в этой области, я написал подробно, чтобы помочь вам понять, не упустил ли я что-то или я правильно описал все шаги, но, возможно, произошла какая-то ошибка, и мне нужно ее отладить.

2 Ответов

Рейтинг:
2

Member 14598083

Нужно ли нам регистрировать в registery файл manifest.json, как описано в документе chrome.
У меня есть это сомнение, так как вы упустили суть, и я пытаюсь построить подобное приложение


Richard Deeming

Если вы хотите задать вопрос, то ЗАДАВАТЬ ВОПРОС[^].

НЕ разместите свой вопрос как "решение" на чей-то другой вопрос.

Рейтинг:
12

Tutun2014

Я нашел его. Все коды, которые я опубликовал выше, верны. Проблема заключалась в другом методе моего кода на C#. Я прокомментировал это, заменил более новую сборку кода C# в папке system32, и дамп файла происходит автоматически всякий раз, когда я работаю с Google Chrome. Нет необходимости запускать файл C# .exe отдельно. Это заняло некоторое время для меня, так как это был мой первый раз с разработкой расширения Chrome, и я искал, как отладить все это.


Mohideenmeera

Привет,
Не могли бы вы поделиться своим кодом, так как я тоже пытаюсь сделать то же самое, но безуспешно.
Надеюсь, ваш код может мне помочь...