【问题标题】:Receiving message in C# from Firefox Extension through Native Messaging通过本机消息传递从 Firefox 扩展接收 C# 中的消息
【发布时间】:2015-01-06 21:49:59
【问题描述】:

我正在尝试从 Mozilla Firefox 获取活动标签标题和 URL。我手动安装了 Firefox 扩展并创建了一个 C# windows 类库应用程序来获取活动标签标题和 url。

首先我安装了 Firefox 扩展,其中包含 package.json、main.js、install.rdf 等文件。下面是我的代码。

main.js

// import js-ctypes 

var {Cu} = require("chrome");
var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm", null);

var self = require("sdk/self");
var tabs = require("sdk/tabs");

var button = require("sdk/ui/button/action").ActionButton({
id: "style-tab",
label: "Style Tab",
icon: "./icon-16.png",
onClick: function() { 

// Open the library 
    var winffAddonewdl;
    try 
    {
    // Linux 
        winffAddonewdl = ctypes.open("filename.dll");
    }
    catch (e) 
    {
    // Most other Unixes 
        winffAddonewdl = ctypes.open("filename.dll");
    }

    //alert(tabs.activeTab.url);
    // Import a function 

    var OpenStandardStreamIn = winffAddonewdl.declare("OpenStandardStreamIn",  // function name
    ctypes.default_abi, // call ABI
    ctypes.int,         // return type
    ctypes.char.ptr,   // argument type
    ctypes.char.ptr);   // argument type

    var ret = OpenStandardStreamIn(tabs.activeTab.title, tabs.activeTab.url);

    winffAddonewdl.close();

    }
});

借助以下链接 (1) https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation,我使用附加 SDK 开发了我的附加组件 (2)https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_started 我的插件安装成功了。

我还创建了用于安装我的加载项的注册表项,并且我的加载项也已成功安装,并在我单击图标时显示当前 URL 和标题。

现在,我只想在切换到不同的 firefox 选项卡或 firefox 窗口时从 Firefox 浏览器获取 Title 和 URL。我开发了一个 c# windows 类库应用程序,通过它我可以获得这个活动的标签标题和 URL。

现在我的问题是如何执行这个 windows 类库应用程序并通过本机消息传递从 JS 文件中获取标题和 URL。我必须运行 Windows 类库应用程序吗?即使我无法在我的 Windows 类库应用程序中接收标题和 URL

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

编辑

我在 main.js 文件中编写了这个简单的代码。下面是我的代码

var tabs = require('sdk/tabs');

tabs.on('activate', function(tab) {
    console.log('active: ' + tab.url);
});

我的插件安装成功,但是当我切换到不同的 Firefox 选项卡或窗口时,浏览器控制台上没有任何内容,除了 tab-events.js 中的“未找到元素”或“内容为空”。

我只想记录活动标签的网址。该怎么做?

等我解决上述问题后,我会讨论原生部分。

【问题讨论】:

  • 对我来说看起来不错,当您执行 var ret = OpenStandardStreamIn(tabs.a... 时,浏览器控制台会抛出什么?
  • 当你做 ctyoes.open('filename.dll') 你必须使用完整路径所以像ctypes.open(self.data.url('filename.dll'))
  • @Noitidart,感谢您的回复。一旦我完成这个简单的部分,我稍后会来到 Native 部分。请参阅编辑部分。
  • 编辑是一个 firefox-addon-sdk 问题我不确定,在那个部分发布会更好,因为这个主题现在提出了两个单独的问题。

标签: firefox-addon extension-methods c#-2.0 firefox-addon-sdk jsctypes


【解决方案1】:

我找到了上述问题的解决方案。下面是我的 main.js 文件代码。

var {Cu} = require("chrome");
var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm", null);

var self = require("sdk/self");
var tabs = require("sdk/tabs");

tabs.on('activate', callNative);

function callNative(tab)
{ 

    var ff;
    try {

    ff = ctypes.open("filename.dll");


    var nativeCaller = ff.declare("OpenStandardStreamIn", // function name
                            ctypes.default_abi, // call ABI
                            ctypes.int32_t,         // return type
                            ctypes.char.ptr,   // argument type
                            ctypes.char.ptr);   // argument type


    var ret = nativeCaller(tab.title, tab.url);
    ff.close();
    } catch (e) {

    }


}

对于本机,我在 Visual Studio 中构建了一个空的 dll 项目。下面是代码。

#include <stdio.h>
#include <stdlib.h>

extern "C"
{
    _declspec(dllexport) int OpenStandardStreamIn(char *title, char *url)
    {
        FILE *fp;

        fp = fopen("dumfilename.txt", "a");

        fprintf(fp, "%s\n", title);
        fprintf(fp, "%s\n", url);

        fclose(fp);
    return 0;
    }
}

编译 dll 项目并将这个 dll 文件转储到系统文件夹中。为 firefox-addon 创建一个注册表项。重新启动 Mozilla Firefox 浏览器以激活插件。

安装成功后,在 Mozilla Firefox 浏览器打开任意 url 或切换到不同的选项卡或窗口,然后检查标题以及 url 获取的转储文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多