Я пытаюсь получить активное название вкладки, а также 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 через встроенный обмен сообщениями. Должен ли я запускать консольное приложение.
Что я должен сейчас делать. Пожалуйста, помогите мне в этом.
Любая помощь будет высоко оценена.
Ищите сообщения об ошибках на стороне Chrome. В частности, фоновая консоль достижима через 'chrome: // extensions /' – Xan
Я нашел ее. Все приведенные выше коды верны. Проблема была в другом методе моего кода на C#. Я прокомментировал это, заменив новую конструкцию кода C# под папкой system32, и дамп файла происходит автоматически, когда я работаю с Google Chrome. – Tutun