2014-10-30 2 views
-1

Я пытаюсь получить активное название вкладки, а также URL-адрес из Google Chrome. Я установил расширение Chrome вручную и создал консольное приложение для получения активного заголовка табуляции и URL-адреса.Получение сообщения на C# из расширения Chrome через собственные сообщения

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

background.js

var port = chrome.runtime.connectNative('com.example.native'); 

function MyCurrentTabs(tab) 
{ 
    getUrl(tab.title, tab.url); 
} 
function onActivate(activeInfo) 
{ 
    chrome.tabs.get(activeInfo.tabId, MyCurrentTabs); 
} 
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); 
    }  
} 

chrome.tabs.onActivated.addListener(onActivate); 
chrome.windows.onFocusChanged.addListener(function(windowId) { 
{ 
    if (windowId != chrome.windows.WINDOW_ID_NONE) 
    { 
     chrome.tabs.query({ active:true, windowId:windowId }, function(tabs) 
     { 
      if (tabs.length === 1) 
      { 
       MyCurrentTabs(tabs[0]) 
      } 
    }); 
} else 
    getUrl("",""); 
}); 

manifest.json

{ 
    "name": "watchURL", 
    "description": "The active url read", 
    "version": "2.0", 
    "permissions": [ 
    "tabs", 
    "nativeMessaging" 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 
    "browser_action": { 
    "default_title": "The active url read", 
    "default_popup": "background.html" 

    }, 
    "manifest_version": 2 
} 

background.html

<html><body><script type="text/javascript" src="background.js"></script></body></html> 

Затем создайте хост исходный файл в формате JSON для нативного сообщений. Ниже мой код.

{ 
"name": "com.example.native", 
"description": "Native support for Chrome Extension", 
"path": "ChromeExt.exe", 
"type": "stdio", 
"allowed_origins": [ 
"chrome-extension://**********************/" 
] 
} 

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

код консольного приложения ниже ----------------

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; 
} 

я сохранил исходный файл хост JSon и файл ехе хром приложений в папке system32 , Но когда я собираюсь открыть вкладку www.google.com, а затем www.yahoo.com в браузере Chrome ничего не произошло. Даже я написал файл и сохранил его в папке system32 при открытии любой вкладки в браузере google chrome, но файл не был записан.

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

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

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

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

+0

Ищите сообщения об ошибках на стороне Chrome. В частности, фоновая консоль достижима через 'chrome: // extensions /' – Xan

+0

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

ответ

0

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

+1

Вы должны, вероятно, удалить этот вопрос; это не полезно для других, так как нет проблем. В противном случае он будет закрыт с «не может быть повторно воспроизведен» вне темы. – Xan

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