javascript – 使用C#应用程序连接Firefox扩展

前端之家收集整理的这篇文章主要介绍了javascript – 使用C#应用程序连接Firefox扩展前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我需要能够创建一个事件,以便每次用户加载新页面关闭firefox时,我需要它在我的C#应用​​程序中调用一个方法来负责维护用户模型.我知道我确定需要创建一些类型的firefox扩展,我使用javascript来检查这样的事件.但是,我不知道如何将我的C#应用​​程序与firefox扩展集成.有人可以给我一些指导吗?

最佳答案
我将帮助您解决我熟悉的问题部分(基于Javascript的附加组件),并为其他部分提供一些建议.这没什么!

附加组件

Firefox附加组件可轻松提供检测页面加载和打开/关闭firefox所需的工具.

要检测页面加载,您可以在窗口中注册侦听器到DOMContentLoaded事件.

window.addEventListener("DOMContentLoaded",function(event){
    var url = event.originalTarget.location.href;
    alert("Oh yeah,a document is loading: " + url);
},false);

或者,您可以注册nsIWebProgressListener以侦听location changes.这可能更接近您想要的,因为DOMContentLoaded也会触发iframe.

var listener = {
    //unimplemented methods (just give functions which do nothing)
    onLocationChange: function(aWebProgress,aRequest,aLocation){
        var url = aLocation.asciiSpec;
        alert("Oh yeah,a the location changed: " + url);
    }
};
gBrowser.addTabsProgressListener(listener);

要检测firefox打开/关闭,您需要先了解firefox附加组件如何处理多个窗口.当启动一个新的firefox窗口时,你基本上有两个单独的代码副本运行.因此,如果你关心firefox窗口被打开和关闭,你可以简单地做:

window.addEventListener("load",function(event){ 
    alert("Looks like you just opened up a new window");
},false);

window.addEventListener("unload",function(event){
    alert("Awh,you closed a window");
},false);

但是,您很可能想要检测打开/关闭firefox作为整个应用程序.这是使用名为Javascript Modules代码共享机制实现的.Javascript模块在应用程序的生命周期内只加载一次.因此,它们使您能够在窗口之间共享信息.只需计算打开和关闭的窗口数量就足以满足此功能.

var EXPORTED_SYMBOLS = ["windowOpened","windowClosed"];
var windowsOpened = 0;
function windowOpened(){
    if( windowsOpened === 0) {
        alert("The first window has been opened!");
    }
    windowsOpened++;
}

function windowClosed(){
    windowsOpened++;
    if( windowsOpened === 0) {
        alert("The last window has been closed!");
    }
}

然后,您可以简单地附加上述事件处理程序,从相应的加载和卸载事件中调用这两个方法.

所以,这一切都很棒,但现在你必须弄清楚获得基线Firefox附加设置的细节.幸运的是,Mozilla提供了一个方便的Addon Builder来缓解这种情况.所有关于(Javascript模块除外)的代码都应放在ff-overlay.js文件中(假设您使用链接的构建器).

C#沟通

我对使用C#进行进程间通信知之甚少.但是,也许我可以指出你正确的方向,并让SO的聪明人填补其余部分.

我相信COM对象是Windows上进程之间的通信方法.因此,您可以在Binary Component中构建附加组件以执行通信.但是,据我所知,设置二进制组件比基于标准javascript的加载项困难得多.无论哪种方式,Mozilla都提供了一个guide,用于在Visual Studio中进行设置.

如果你想远离二进制组件,你可以使用SDK的javascript启用组件.这包括套接字通信,文件,管道,sqlite数据库等.这个SO question完全解决了你问的问题.如果是我,我会按此顺序选择它们.

> sqlite数据库
>命名管道
>插座

(1)因为有很多可用的代码示例,并且很容易在双方实现. (2)因为如果我完全控制了应用程序的两面,这就是我实现IPC的方式. (3)是最后一次因为我讨厌那个垃圾(也许我在大学里偏向于分布式系统).

TL;博士

页面加载的东西应该非常简单.查看Addon Builder获取FF插件,并查看here以了解检测页面加载情况.

C#通信是可行的,并在SO Question解决.如果是我的话,我会使用sqlite数据库来轻松实现.

猜你在找的JavaScript相关文章