1

我正在尝试从 Google Chrome 获取活动标签标题以及 URL。我已经手动安装了 Chrome 扩展并创建了一个控制台应用程序来获取活动标签标题和 url。

首先,我安装了包含 manifest.json、background.js 和 background.html 等文件的 Chrome 扩展程序。下面是我的代码。

背景.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("","");
});

清单.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
}

背景.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 文件和 chrome 应用程序 exe 文件保存在 system32 文件夹中。但是当我要打开 www.google.com 选项卡,然后在 chrome 浏览器上打开 www.yahoo.com 时,什么也没发生。即使我已经编写了一个文件并将其保存在 system32 文件夹中,同时在 google chrome 浏览器上打开任何选项卡,但该文件尚未写入。

一旦手动成功完成,我将稍后在谷歌商店发布我的扩展。

现在我的问题是如何执行这个控制台应用程序并通过本机消息传递从 JS 文件中获取标题和 URL。我必须运行控制台应用程序吗?

我现在应该做什么。请在这方面帮助我。

任何形式的帮助将不胜感激。

4

1 回答 1

1

我找到了。我上面发布的所有代码都是正确的。问题出在我的 C# 代码的另一种方法中。我评论说,替换了 system32 文件夹下 C# 代码的较新版本,并且文件转储正在发生,并且每当我使用 Google Chrome 时,它​​还会自动获取活动选项卡和 url。

于 2014-11-27T07:37:13.483 回答