我的Firefox插件开发之旅

我的Firefox插件开发之旅
我的Firefox插件开发之旅

转自:http://www.cppbl https://www.360docs.net/doc/8d13572897.html,/epubcn/archive/2008/11/07/66206.html

我的Firefox插件开发之旅

(1)——从零开始

准备做一个Firefox插件,用来接收从WEB页面传递的参数,根据这些参数从服务器上下载一些文件到本地,并调起本地的一个应用程序。

以前在IE中是使用一个ActiveX来实现的。FF的插件从来没有做过,不知道将来会遇到多少困难。

在网上发现一个页面:https://www.360docs.net/doc/8d13572897.html,/code/mozilla/extensionwiz/,它提供了一个FF扩展的生成向导,填写完必要信息后,会生成一个zip文件。之后我改名为xpi后,丢到我的FF 3.0中,提示不正确的安装包。看来这个向导针对FF3还有些问题。具体问题是什么?现在还不清楚。让我来继续寻找资料……

在Mozilla网站上了解到,FF的Extension和Plugin是两种概念的东西:

Extension就是一个zip包,里面有规定的一些必要文件。这个可以下载几个插件看一下他们的目录结构就好了。我下载了一个QuickNote,看了一下,主要包括一个install.rdf(安装包相关信息和文件资源路径等配置)、chrome.manifest(设置各种XUL文件路径以及其他的一些资源文件路径)、chrome文件夹(里面放着插件的所有源文件),不过chrome文件夹里面的文件我还没有过多研究。

Plugin好像是另外一码事了,在Mozilla Developer Center的Plugin开发介绍文中有这么一句:Plugins are different from extensions, which m odify or enhance the functionality of the browser itself. Plugins are also different from search plugins, which plug additional search engines in the search bar. (插件与扩展不同,它更改或者改善了浏览器自身的功能。插件与搜索插件又不同,搜索插件在搜索工具栏上添加了额外的搜索引擎。)

我的理解,插件可以让你在FF中使用自己的View来展示、用自己编写的二进制文件来做某些事情,不仅仅是利用FF自身支持的一些特性和功能。而扩展相对来说就不需要这些东西,只利用FF的开发API就好了。

这样看来,要实现我开始提到的需求,似乎可以开发一个Extension就可以了。Foxmarks Bookmark Synchronizer(FBS)也差不多是我的需求这种感觉:将本地某些数据上传至服务

器,从服务器同步下载一些数据到本地。FBS既然是一个扩展能够实现,那么看来我暂时不用研究Plugin了,呵呵。

OK,有了大概的目标。下面开始制订学习计划!

通过研究别人写的Extension,里面有很多js、css、im ages、ht ml,这些应该还好理解,但是多了一些后缀名为xul的文件。这是什么东西?看来想开发Extension,这个文件需要好好研究一下。

因此,我的第一个学习计划就是搞清楚XUL是什么,什么地方要用XUL,以及怎么写XUL?

先说到这里,下一小节我来写一些XUL的学习历程。

(2)——XUL是什么?

What is XUL?这个页面给出了详细的介绍:

https://www.360docs.net/doc/8d13572897.html,/tutorials/whyxul.ht ml。

看完后,了解了XUL原来是一个支持多种WEB技术的、基于XML的界面开发语言。它既可以在远程执行,也可以安装到本地执行。

在XUL中内置了很多界面元素,如菜单、按钮、分页等等,这样就不需要自己编写很多JS来维护和控制很多界面元素了。而且,这些界面是按照当时的OS外观来展现的,比如同一个按钮,在MacOS上和Windows上看起来就不一样。另外XUL也允许自己使用JS和CSS来定制自己的个性化界面。总之一句话,XUL的主要作用就是用来展现Extension的用户交互界面的。

OK,知道了XUL是什么以后,那么怎么学习它的用法呢?文章最下方适时地给出了一个连接:begin the XUL tutorial,还挺人性化:) 我点~~~

教程很多,很强大。看来一时半会儿全搞清楚是不可能的了。慢慢来吧。

哦对了,还发现一个在线的XUL编辑器,把XUL代码粘进去,下面可以实时地显示界面。不过不能引用外部脚本,否则就出错。链接是:

http://ted.m https://www.360docs.net/doc/8d13572897.html,/code/m ozilla/xuledit/xuledit.xul。

(3)——我的第一个扩展

简单知道了XUL,迫不及待地想立即编写一个插件,哪怕什么事情都不做也好。O(∩_∩)O

通过这个页面https://developer.m https://www.360docs.net/doc/8d13572897.html,/en/Building_an_Extension,可以找到编写一个插件必须要做得一些事情,写的很清楚。最后产生的目录和文件结构是这个样子:install.rdf

chrom e.manifest

chrom e

|--content

|--overlay.xul (我准备在这里编写代码,在FF的工具栏上添加一个按钮)

|--locale

|--en-US

|--sam ple.dtd

|--zh-CN

|--sam ple.dtd

|--zh-TW

|--sam ple.dtd

|--skin

|--classic

|--sam pleicon.png

|--sm allicon.png

|--default.css (界面显示的样式表,今后可能会用到)

上面文件中的install.rdf、chrome.m anifest基本上用例子中的就好了,dtd文件里面是界面文字,这个可以模仿其他插件编写。

overlay.xul我准备添加一段代码,用来在FF工具栏上添加一个按钮。skin下面的png是准备在工具栏上添加的按钮的图标。

OK,把上面整个目录用zip打个包,改后缀名为xpi,拖放到FF3中,提示尚未验证作者、是否继续安装。这个先不管它,以后再研究。安装以后,重启FF3,哈哈,写的第一个Extension 成功安装了!只不过overlay.xul里面什么都没写,所以还没有视觉上的成就感。下面开始添加overlay.xul中的代码。

怎么在工具栏上添加按钮呢?感谢Mozilla提供的文档,专门有一篇文章是讲这个地:https://https://www.360docs.net/doc/8d13572897.html,/en/Creating_toolbar_buttons。文章里面讲的非常清楚,我这里就不废话了。不过有两点需要注意一下:

1、样式表中的ID和toolbarbutton的id一定要保持一致;

2、按钮的label和tooltiptext可以直接添加文字,但如果使用了中文,有可能会显示乱码(至少在我的FF3上是这样);

3、按钮的图标一定要大小两种(24x2

4、16x16)都提供;

4、label和tooltiptext可以使用dtd中定义的文字,但必须注意:dtd文件必须存为UTF-8编码,否则会导致按钮显示不出来!

在FF3的定制工具栏中,有图标,但下方没有文字,好像是我哪里忘记添加文字了,一会儿看看去……

好了,我的第一个FF插件就写好了,不过现在只是在工具栏上添加了一个按钮而已,什么事情都没做,下一次我们添加一些行为给它。

以下附上几个关键文件的内容:

一、install.rdf

xmlns="https://www.360docs.net/doc/8d13572897.html,/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www .m https://www.360docs.net/doc/8d13572897.html,/2004/em-rdf#">

{859606AC-AFFE-4691-82C5-FA0148A7E2D4}

1.0

2

MeetMePlus

Anywhere, anytime to starting a

conferencing

G-NET

chrome://meet m eplus/skin/gnet_32.png

http://www.m eet m https://www.360docs.net/doc/8d13572897.html,/

{ec8030f7-c20a-464f-9b0e-13a3a9e97384}

1.5

3.0.*

二、chrome.manifest

overlay chrom e://browser/content/browser.xul chrome://meet m eplus/conte nt/overlay.xul

content m eet m eplus chrom e/content/

style chrome://global/content/customizeToolbar.xul chrom e://m eet meplus/s kin/default.css

skin m eet m eplus classic/1.0 chrom e/skin/classic/

locale m eet m eplus zh-CN chrom e/locale/zh-CN/

三、overlay.xul

type="text/css"?>

xmlns="http://www.m https://www.360docs.net/doc/8d13572897.html,/keymaster/gatekeeper/there.is.only.xul">

class="toolbarbutton-1 chrom eclass-toolbar-additional">

tooltiptext="&mmp.gotohome.tooltip;"

image="chrome://meet m eplus/skin/option_16.png" class="menuitem-iconic"/>

四、overlay.dtd

(4)——XULRunner的一个例子

上一节写了一个Extension,添加了一个按钮在FF3的工具栏上。接下来我准备在这个基础上添加一个功能,点击按钮,读取本地磁盘上一个文件的内容,并显示出来。怎么做呢?用Javascript吗?因为我最终的目标是从服务器上下载文件,也可能会传输本地文件到服务器上,用Javascript访问本地文件有诸多限制,而且也无法完成复杂的功能。所以最好是能够调用我编写的DLL那就最好不过了。怎么做呢?还是在Mozilla网站上找找看吧。

在Mozilla网站上看到,可以自己编写Component来完成一些自定义操作。需要首先安装Gecko SDK(现在叫XULRunner SDK),Windows上有两个版本,1.8是for FF1.5/2.0

的,1.9是for FF3.0的,由于我机器上安装的是FF3.0,那么就先下载1.9吧,与FF1.5/2.0兼容的问题以后再说。

下载了XULRunner SDK 1.9,解压到本地后,在环境变量里配置了PATH到xulrunner-sdk 的bin目录,以便可以在command prompt下直接运行xulrunner.exe。OK,环境配置完毕,下面来个写个小例子吧。Mozilla提供了一个短小精悍的例子程序,在这里:

https://https://www.360docs.net/doc/8d13572897.html,/en/Getting_started_with_XULRunner

这篇文章一步一步教我们编写一个HelloWorld程序,写的很清楚。不过做完这个例子,我有几个疑问:

1、在上一节我们写的Extension中,chrome.manifest这个文件是放在根目录的(与chrome 目录同级),为什么这里把它放在了chrome目录里面呢?能否保持和Extension相同?我简单尝试了一下,并修改了chrome.manifest里面content所指向的目录,然后运行了一下,什么都没发生,没有看到正常运行时所弹出的对话框,看来还是解析不正确,是不是xulrunner 必须要求chrome.manifest在chrome目录下面呢?

2、application.ini中App节的ID,和Extension的ID(通常是一个GUID)有无关联呢?

3、调用xulrunner.exe以后,会产生两个目录:extensions和updates,这两个目录是干什么用的呢?

另外这里需要特别说明一点:在运行xulrunner去执行application.ini时,千万不能丢掉.exe,即不能写/>xulrunner application.ini,必须是/>xulrunner.exe application.ini,否则会弹出couldn't parse的错误提示,具体是什么原因我也不清楚。

另外,这里还有一篇关于xulrunner的教程,解释了一些概念性的东西:

https://www.360docs.net/doc/8d13572897.html,/ryan/archive/2005/05/06/1073.aspx

写完这个例子,感觉方向好像不太对,xulrunner好像主要还是做界面,怎么做组件呢?怎么访问本地磁盘文件、甚至系统注册表?在Mozilla的开发者页面上又看到一个东东:XPCOM,开头的一段介绍文字是这样的:

XPCOM is a cross platform com ponent object m odel, similar to Microsoft COM. It has multiple language bindings, letting the XPCOM com ponents be used and

implem ented in JavaScript, Java, and Python in addition to C++. Interfaces in XPCOM are defined in a dialect of IDL called XPIDL.

XPCOM itself provides a set of core com ponents and classes, e.g. file and m emory management, threads, basic data structures (strings, arrays, variants), etc. The majority of XPCOM com ponents is not part of this core set and is provided by other parts of the platform (e.g. Gecko or Necko) or by an application or even by an extension.

大概的意思是说XPCOM类似于微软的COM组件概念,它可以定义一些接口,可以在JS、Java、Python以及C++中使用。哈哈,看来这个才是我想要的东西。OK,那接下来我就来研究一下这个东东吧。下一节争取能完成我一开始提到的功能。

(5)——编译和测试第一个Plugin例子:npruntime

前几天一直在忙乎着研究和阅读XUL和FF的Extension相关资料,今天突然发现,我要做得事情似乎不是用Extension来实现的。因为原来的应用是一个ActiveX,网页会将一些参数通过ActiveX控件传递进来,而ActiveX接到这些参数以后,会和服务器进行一些数据交互,最后调起本地的执行程序。似乎我走了一些弯路,方向不对。我要做得事情应该是编写一个Plugin,而非Extension。

及时修正了下一步的研究计划,那么就让我们先来编译和测试Mozilla提供的一个小例子吧。原文连接在这里:

https://https://www.360docs.net/doc/8d13572897.html,/En/Compiling_The_npruntime_Sample_Plugin_in_Vi sual_Studio。文章中是以VS2003举例,我这里以VC6来进行测试,并且将步骤中需要注意的地方特别说明了一下。

1、先到这里下载相关源码:

https://www.360docs.net/doc/8d13572897.html,/seamonkey/source/m odules/plugin/samples/npruntime/。不知道为什么Mozilla只提供了页面形式,没有打个包,害得我得一个个文件下载和保存,郁闷。

2、在VC6中新建一个Win32 Dynamic-Link Library工程,取名“nprt”。注意:建议工程以小写np开头,并且长度不超过8个字符,这样以后就会省事很多。

3、下一步,选择“An em pty DLL project”,然后“Finish”。

4、将刚才下载的源码添加到工程中来。test.html不用添加,nprt.def建议也添加进来。

5、现在还不能编译,否则会出很多错误。打开Project Settings,转到C/C++标签页,在Category中选择Preprocessor,在Preprocessor Definitions中最后面添

加:,XP_WIN32,MOZILLA_ST RICT_API,XPCOM_GLUE,XP_WIN,_X86_。注:如果你使用VS 2005,需要添加全部的定义:

WIN32;_WINDOWS;NPRT_EXPORTS;XP_WIN32;MOZILLA_STRICT_API;XPCOM_G LUE;XP_WIN;_X86_

6、在Additional include directories下面添加XULRunner SDK的include路径,可以是绝对路径,也可以是相对路径,看你当初怎么解压的了。例如:..\..\xulrunner-sdk\include

7、在Category中选择Precompiled Headers,选择Not using precom piled headers,OK,关闭Project Settings对话框。打开npp_gate.cpp,将下面的代码注释掉:

jref NPP_GetJavaClass (void)

{

return NULL;

}

8、编译!……我靠,有错:Fatal error C1083: Cannot open include file: 'npapi.h': No such file or directory。我可是严格按照教程上面写的去做得啊。

9、在xulrunner-sdk目录下搜索了一下npapi.h,原来在xulrunner-sdk\sdk\include下面,这好办,多加一条包含路径不就欧了?仿照第6步,添加该目录;

10、编译!OK,过了。

11、到输出目录下将nprt.dll复制到FF安装目录的plugins目录下,例如:C:\Program Files\Mozilla Firefox\plugins\

12、如果此时FF开着也没关系,不用关(这点很不错)。在地址栏键入about:plugins,看看是不是有一个npruntime scriptable example plugin,如果有,那就表示欧了,FF认出了我们的插件;

13、在FF中打开test.htm l,嗯?怎么还提示安装缺失插件?用EditPlus打开test.html,噢,原来有这么一句:

type="application/x-java-m ozilla-npruntime-scriptable-plugin" style="display: block; width: 50%; height: 100px;">。因为我们刚才没有添加名字为

x-java-mozilla-npruntime-scriptable-plugin的插件,所以当然认不出来啦。

14、随便点一下页面上的按钮,看看简单的交互行为。

OK,第一个例子还算顺利,比想象中的要顺利。下面就该研究一下代码了,看看FF的插件和ActiveX的区别到底有多大。

附一些参考资料:

https://www.360docs.net/doc/8d13572897.html,/index.php/archives/2124

https://www.360docs.net/doc/8d13572897.html,/2008/09/plugin-firefox-plugin.ht ml

(6)——FF插件的一些基础知识

上篇文章学习了npruntime的例子程序,接下来迫不及待地想实现自己的一个插件了。我决定使用VS 2005来做。

新建了一个名为npgnet的工程,按照npruntime例子,新建了np_entry.cpp、

npn_gate.cpp、npp_gate.cpp、npgnet.def四个文件,然后新建了一个类CGnetFFPlugin,并且把例子中的关键代码添加了进来(我删除了一些cplugin类中的函数实体代码,因为我实现的功能和例子中的无关)。编译后,将生成的npgnet.dll放到FF的plugins目录下,然后在地址栏键入about:plugins,我靠,竟然没有我的插件!怎么回事?三个导出函数我都按照标准写了啊?比较了一下文件,我的工程没有添加.rc和resource.h,可能是这个原因。

回到VS 2005,在资源面板添加了一个VERSION资源项,修改ProductNam e等资源项以后,和npruntime例子比较了一下,还差MIMEType。这个东东很重要,这个给我的感觉就是FF 插件的身份证,FF就是靠这个东东来匹配和识别你的插件的。但是我不知道VS 2005中怎么添加一个VERSION的键值,所以我只好用EditPlus打开npgnet.rc,手动添加了MIMEType:application/mozilla-npgnet-scriptable-plugin。OK,现在.rc和resource.h都欧了,再编译,将生成的npgnet.dll放到FF的plugins目录下,然后在地址栏键入about:plugins,我靠,竟然还是没有我的插件!真费解啊!

头大……接下来我进行了一系列的代码比较和尝试,失败了N多次,这里就省略不说了。最后发现原因原来在这个.rc上面。我的这个.rc是在VS 2005中使用菜单命令添加的,默认语言是简体中文,而npruntime例子是英文,用文件比较工具比较了一下,codepage和部分代码的位置都不太一样。其实只要把npruntime的这个.rc文件替换我的这个,然后编译输出的dll,FF 就可以识别了!究竟是什么原因呢?是我的.rc缺少了些什么东西?还是FF只能识别英文

的.rc?先不打算研究那么多了,至少我的插件的关键点不在这个上面,后面我还有很多事情需要去做。只要能让FF认出来,那就好。

既然决定要写插件,就要先理解插件的概念,在这个页面上有很详细的介绍:

https://https://www.360docs.net/doc/8d13572897.html,/en/Gecko_Plugin_API_Reference/Plug-in_Basics

下面的文字是我的一些阅读笔记和体会:

一、插件的加载过程

当一个页面打开时,如果该页面上有嵌入一个插件,浏览器将会做以下事情:

?通过MIMEType检查是否有匹配插件

?加载插件代码到内存

?初始化插件

?创建一个新的插件实例

插件可以在一个页面上被实例多个对象,也可以在同一时刻在不同的窗口中被实例化。当页面被关闭时,插件的实例就会被销毁。当最后一个实例被删除后,插件代码就会从内存中被卸载掉。

下面是插件内的函数调用过程:

?如果插件是首次被载入内存,浏览器会调用插件的NP_Initialize方法。为了方便起见,所有的插件定义函数以“NPP”开头,所有的浏览器定义函数以“NPN”开头。

?当浏览器创建插件实例时,会调用NPP_New方法。

?当插件实例被删除时(如关闭页面、关闭窗口),会调用NPP_Destroy方法。

?当最后一个实例被删除,插件从内存中卸载时,会调用NP_Shutdown方法。

二、插件检测

可以使用Javascript来检测一个插件是不是已经安装了,下面是测试代码:

function DetectFFPlugin()

{

var mimetype =

navigator.mimeTypes["application/mozilla-npgnet-scriptable-plugin"];

if(mimetype)

{

var plugin = mim etype.enabledPlugin;

if(plugin)

{

docum ent.writeln("Plugin had been installed and be enabled.");

}

}

else

{

docum ent.writeln("Sorry, Plugin has NOT been installed.");

}

}

嗯,看到这里,觉得这个检测很有用。当检测用户尚未安装时,可以指导用户到哪哪哪去下载安装(转向一个漂亮点儿的页面),当检测已经安装了,就动态加载插件代码。不错。:)

三、插件结构概述

一个插件中的方法分为插件方法(Plug-in Methods)和浏览器方法(Browser Methods)。插件方法是你在插件中自己去执行的那些方法,以NPP为前缀命名。浏览器方法是被Gecko

所执行的那些方法,以NPN为前缀命名。数据结构(Data Structures)以NP开头。

插件可分为有窗口和无窗口两种,不过文章中建议使用有窗口的,说这样会更稳定和易于控制。另外文中提到了可以将插件作为页面的一部分,并且可以使用HTML代码来控制插件的显示与否。

有两种方式可以使一个插件不可见:

1、如果你使用embed标签,可以使用其hidden属性,例如:

2、如果你是用object标签,由于它没有hidden属性,你可以用CSS来完成隐藏:

object

{

visibility: visible;

}

object.hiddenObject

{

visibility: hidden !important;

width: 0px !important;

height: 0px !important;

m argin: 0px !important;

padding: 0px !important;

border-style: none !important;

border-width: 0px !important;

m ax-width: 0px !important;

m ax-height: 0px !important;

}

type="audio/x-aiff" class="hiddenObject">

接下来文中介绍了object这个标签的使用。并且给了一个例子来说明ActiveX和插件如何融为一体来使用。

最后面的部分是对object和em bed两种标签的各种属性的说明和举例。

值得一提的是,对于object和embed两种标签都可以在页面上嵌入一个插件。如何取舍呢?文章中有这么一段话:

Though the object elem ent is the preferred way to invoke plug-ins,

the embed elem ent can be used for backward compatibility with Netscape 4.x browsers, and in cases where you specifically want to prom pt the user to install a plug-in, because the default plug-in is only autom atically invoked when you use the embed elem ent.

意思是说:尽管object是推荐使用的调用插件的方式,embed也可嵌入插件(Netscape 4.x 以上的浏览器),但如果你想在用户没有安装插件时,提示他进行安装,那么就应该选择用

em bed,因为FF的默认插件系统仅仅在你使用embed标签的时候,才会自动帮助你完成这种提示用户安装的效果。

我看过以后的感觉是,object使用起来似乎比embed要复杂,起码针对FF这个浏览器是这样,虽然他是HTML W3C的标准。多数情况下使用embed就可以了,何况现在谁还在用Netscape 4.x以下版本的浏览器啊,您说是不是?:)

OK,通过这几天的学习,终于对FF的插件编写有了一个初步的感性认识。到目前为之一切还比较顺利。

(7)——为插件添加和脚本交互的能力

先说一句题外话,上一节一开始我提到了由于.rc导致我自己写的插件不能被FF识别的问题,今天终于找到答案了。在这篇文章中:

https://https://www.360docs.net/doc/8d13572897.html,/en/Gecko_Plugin_API_Reference/Plug-in_Developm ent_Overview,有这么一段话:In your development environm ent, m ake sure your language is set to "US English" and the character set to "Windows Multilingual." The

resource code for this language and character set com bination is 040904E4. 看来这FF还只能使用英文。

OK,步入正题。这一小节我来简单说一下如何为插件添加和脚本语言(如Javascript)交互的能力。我会为插件添加几个函数,供Javascript调用。

前面我们提到过浏览器调用插件的方法的顺序,基本上为:NP_GetEntryPoints、

NP_Initialize、NPP_New、NPP_SetWindow、NPP_GetValue。在NPP_New中,我们需要创建插件对象的实例,NPP_SetWindow中,浏览器会传入插件窗口的信息,最后一个NPP_GetValue,是浏览器来获取一些插件信息的。NPP_GetValue函数的结构是这样的:

NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value);

?instance包含着插件对象实例;

?variable表示浏览器要获取的信息的类型;

?value表示返回给浏览器的值

浏览器会传入NPPVpluginScriptableNPObject(作为variable参数)来查询插件是否支持Scriptable功能(即和脚本语言交互的功能),在这里,我们可以利用

NPN_CreateObject方法来创建一个NPObject对象,并且作为value返回给浏览器。这样,浏览器就通过这个NPObject对象和我们的插件建立了连接。当页面上Javascript

调用了我们插件对象的某个方法时,浏览器会调用该NPObject对象的HasMethod方法来查询是否支持这个方法,如果支持,则会调用NPObject对象的Invoke方法,传入方法名、参数等信息。这样,我们就可以让网页上的脚本语言来执行我们编写的函数了。在Windows 上,我们编写的函数就如同编写普通的应用程序一样,可以使用很多Windows API来完成许多复杂的工作。

上面有个问题:如何创建我们自己的NPObject对象?NPN_CreateObject方法如何使用?好在Mozilla给我们提供了npruntime这个例子程序,可以让我们得以参考。

先来看看NPN_CreateObject方法的定义:

NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);

关键在第二个参数上,我们需要提供一个NPClass指针。npruntime例子程序中是这么做的:

定义了一个宏DECLARE_NPOBJECT_CLASS_WITH_BASE,其作用就是定义了一个静态的NPClass对象,并且NPClass要求的所有基础方法,都由一个ScriptablePluginObjectBase 类来提供。我们根据需要,来创建不同的继承于ScriptablePluginObjectBase的类(比如支持方法的类和支持属性的类),传给DECLARE_NPOBJECT_CLASS_WITH_BASE宏,这样,当浏览器管我们“要”的时候,我们就可以按照它的需要“给”它对应的对象。

npruntime例子中,ScriptablePluginObject是用来处理方法的,而ConstructablePluginObject是用来处理属性的。

如何定义一个方法(或属性)?

1、添加一个方法(或属性)很简单,先定义一个静态NPIdentifier类型的变量,例如:

static NPIdentifier s_idSetArgs;

2、在插件对象构造函数中,使用NPN_GetStringIdentifier方法来设置该方法的名称,例如:

s_idSetArgs = NPN_GetStringIdentifier("SetArgs");

其中,SetArgs就是我们提供给脚本语言调用的方法名称。

3、在ScriptablePluginObject的HasMethod方法中,判断传入的方法名:

bool ScriptablePluginObject::HasMethod(NPIdentifier name)

{

if(nam e == s_idSetArgs)

{

printf("method name = SetArgs\n");

return true;

}

return false;

}

4、在ScriptablePluginObject的Invoke方法中,判断如果传入的方法名称等于我们定义的方法名,则做你想要做得事情:

//////////////////////////////////////////////////////////////////////////

///

/// @brief 如果某个方法支持(使用HasMethod检测),当页面上Javascript代码调用该方法时,会执行本函数

///

/// @param [in] name 方法名

/// @param [in] args 参数值(数组)

/// @param [in] argCount 参数个数

/// @param [in] result 执行后返回给调用者的结果

///

/// @return PR_T RUE表示执行成功,PR_FALSE表示失败

///

//////////////////////////////////////////////////////////////////////////

bool ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result)

{

if(nam e == s_idSetArgs)

{

这里做你想要做得事情

return PR_T RUE;

}

return PR_FALSE;

}

关于方法参数的接收,这里举个例子。比如网页上这么调用:

em bedobj.SetArgs("name", "value");

在我们的方法中,就可以这么接收:

if(args != NULL && argCount >= 2)

{

NPVariant npvName = args[0]; //第一个参数

NPVariant npvValue = args[1]; //第二个参数

if(NPVARIANT_IS_ST RING(npvNam e) &&

NPVARIANT_IS_ST RING(npvValue)) //如果两者都是字符串类型(当然你还可以判断是否是其他类型)

{

NPString npsName = NPVARIANT_TO_STRING(npvName); //转成NPString NPString npsValue = NPVARIANT_TO_ST RING(npvValue);

if(npsName.utf8characters && strlen(npsName.utf8characters) > 0) //限定条件,可以根据需要进行修改。这里限定第一个参数内容不能为空

{

int nLenNam e = strlen(npsName.utf8characters) + 1;

int nLenValue = strlen(npsValue.utf8characters) + 1;

PARAMPAIR paramPair;

param Pair.pName = new char[nLenName];

m emset(paramPair.pName, 0, nLenName);

param Pair.pValue = new char[nLenValue];

m emset(paramPair.pValue, 0, nLenValue);

strcpy(param Pair.pName, npsName.utf8characters); //将参数内存存储到我们熟悉的C

strcpy(param Pair.pValue, npsValue.utf8characters);

m_vecParam Pair.push_back(paramPair);

}

}

}

上面的代码中,PARAMPAIR就是一个简单的结构体:

typedef struct tagPARAMPAIR

{

LPTSTR pName;

LPTSTR pValue;

}PARAMPAIR, *PPARAMPAIR;

m_vecParamPair是一个vector:vector m_vecParam Pair;

顺便说一句,上面只是代码片段,关于内存释放、vector清空等操作,由于不是这里要说的关键部分,所以没有列出。

OK,现在我们的插件已经可以顺利和网页进行交互工作了。

(8)——插件的安装与更新

插件写好了,下面就该做一个安装包了。最好再提供更新功能,以便在插件有更新的时候,及时通知用户进行插件更新。

我们开发的时候,直接将生成的dll丢到Firefox安装目录下的plugins目录就可以工作了,但是你如何说服让用户来手动完成这件事情?估计很难。因此,提供一个安装包,可能是最好的选择。用户只需要点几下鼠标就可以完成插件的安装了。

不过到写这篇文章的时候,我还不清楚怎么让安装包经过Mozilla的验证,因为没有经过验证的插件,在安装的时候会出现“仅安装信任作者的附加组件”提示对话框,提示用户仅安装受信任作者的插件。如果有人知道怎么去掉这个警告对话框,还望不吝赐教。

最最简单的插件安装包在这篇文章中开头处写的很清楚了:

https://https://www.360docs.net/doc/8d13572897.html,/en/Shipping_a_plugin_as_an_extension

安装包的目录结构:

install.rdf

plugins/

pluginlib.dll

plugintypes.xpt

其中xpt文件可选。install.rdf的内容为:

xmlns="https://www.360docs.net/doc/8d13572897.html,/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www .m https://www.360docs.net/doc/8d13572897.html,/2004/em-rdf#">

mypluginid@m https://www.360docs.net/doc/8d13572897.html,

My Plugin

1.0

{ec8030f7-c20a-464f-9b0e-13a3a9e97384}

1.5

3.0.*

将上面内容安装目录结构用zip格式压缩,将后缀名改为xpi就OK了。

但是我们要做得事情远不止这些:

?如何提供插件的更新自动通知?

?如何将扩展和插件捆绑在一起让用户安装?(因为可能你不仅仅要安装插件,还希望在用户的FF工具栏或菜单上添加一些扩展功能)

?如何对插件进行签名?

?如何发布你的插件和扩展,以便让更多人知晓?

要做的事情还很多。那么我们就一个个来研究吧。

一、如何提供插件的更新自动通知?

关于Install m anifest(即install.rdf)文件内容,Mozilla有篇很详细的文章:

https://https://www.360docs.net/doc/8d13572897.html,/en/Install.rdf,可以进行参考。

其中有个节点名称是:updateURL。用这个标签包含一个可查询更新信息的URL连接,今后当FF在查询插件是否有更新时,会到你指定的这个URL上去查询。

这个URL可以是一个cgi程序、servlet、asp(x),也可以是一个固定的rdf文件链接。另外文章中也提到了另外一种办法:如果你没有提供updateURL,FF的附加组件管理器会向https://www.360docs.net/doc/8d13572897.html,发送请求,当你上传了一个新版本的插件或者通过作者接口(author

interface)更改了兼容性参数,一个更新的manifest文件将会被自动产生。另外,Mozilla建议updateURL使用https而非http,否则你应该提供updateKey(可以用McCoy生成)。

那么,负责更新的rdf怎么编写呢?你可以参考这篇文章:

https://https://www.360docs.net/doc/8d13572897.html,/en/Extension_Versioning%2c_Update_and_Compati bility#Update_RDF_Format。由于文章中写的很清晰,并且提供了详细的例子代码,这里我就不废话了。

二、如何将扩展和插件捆绑在一起让用户安装?

这个很简单。之前的章节我们已经做过一个简单的Extension安装包,如果想附加一个插件的话,只需要和chrome的同级目录下新建一个plugins目录,然后将dll及相关文件放在里面,最后一起打包即可。

当在FF中安装此xpi时,FF会将Extension和Plugin解压到FF的Profiles目录下。插件和扩展即可生效。

注意这里与我们之前将插件dll放在FF安装目录下的plugins目录下有些不同(至少位置不同),FF同样能够正确地识别我们的插件。另外Mozilla也推荐做成安装包,这样,在用户卸载组件的时候,可以同时将Extension和Plugin都卸载掉。

三、如何对插件进行签名?

很抱歉,还没找到答案……

四、如何发布你的插件和扩展,以便让更多人知晓?

首先需要在Mozilla网站上注册一个账号(需要提供合法E-m ail,因为要激活)。

登录后,在Mozilla 附加组件首页上你会看到一个“开发者工具”的链接。进入后,会有明显的导航链接,如“提交附加组件”。通过这个页面,按照向导,你就可以将你的插件发布出来了。剩下的事,就是宣传咯,呵呵。

OK,《我的Firefox插件开发之旅》系列文章就先到这里。将来我也许还会写一些关于编写FF 的Extension和Plugin方面的技术细节文章。看心情吧,呵呵。

Firebug+Firefox调试方法

在火狐中困扰我大半天的js问题.找到这个. 半小时就搞定了.. .下面是原帖内容. 什么是Firebug 从事了数年的Web开发工作,越来越觉得现在对WEB开发有了更高的要求。要写出漂亮的HTML代码;要编写精致的CSS样式表展示每个页面模块;要调试javascript 给页面增加一些更活泼的要素;要使用Ajax给用户带来更好的体验。一个优秀的WEB开发人员需要顾及更多层面,才能交出一份同样优秀的作业。为帮助广大正处于Web2.0洪流中的开发人员,在这里为大家介绍一款轻巧灵活的辅助开发工具。 Firebug是Firefox下的一款开发类插件,现属于Firefox 的五星级强力推荐插件之一。它集HTML查看和编辑、Javascript控制台、网络状况监视器于一体,是开发JavaScript、CSS、HTML和Ajax的得力助手。Firebug如同一把精巧的瑞士军刀,从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。这是一款让人爱不释手的插件,如果你以前没有接触过它,也许在阅读本文之后,会有一试的欲望。笔者在撰写此文的时候,正逢Firebug发布1.0正式版,这不能不说是种巧合。 应用 Firebug插件虽然功能强大,但是它已经和Firefox浏览器无缝地结合在一起,使用简单直观。如果你担心它会占用太多的系统资源,也可以方便地启用/关闭这个插件,甚至针对特定的站点开启这个插件。 在安装好插件之后,先用Firefox浏览器打开需要测试的页面,然后点击右下方的绿色按钮或使用快捷键F12唤出Firebug插件,它会将当前页面分成上下两个框架,如图1所示。 图1:Firebug插件展开图示 从图1中看到,Firebug有6个主要的Tab按钮,下文将主要介绍介绍这几方面的功能。 Console 控制台 控制台能够显示当前页面中的javascript错误以及警告,并提示出错的文件和行号,方便调试,这些错误提示比起浏览器本身提供的错误提示更加详细且具有参考价值。而且在调试Ajax应用的时候也是特别有用,你能够在控制台里看到每一个XMLHttpRequests请求post出去的参数、URL,http头以及回馈的内容,原本似乎在幕后黑匣子里运作的程序被清清楚楚地展示在你面前。

火狐浏览器打不开网页解决方法

火狐浏览器打不开网页解决方法 导读:我根据大家的需要整理了一份关于《火狐浏览器打不开网页解决方法》的内容,具体内容:火狐浏览器受到不少用户好评。由于火狐浏览器开放了源代码,因此还有一些第三方编译版供使用。不过很多用户在使用火狐浏览器的时候会遇上打不开网页,那这时候该怎么处理呢。下面,我就为大家介绍下... 火狐浏览器受到不少用户好评。由于火狐浏览器开放了源代码,因此还有一些第三方编译版供使用。不过很多用户在使用火狐浏览器的时候会遇上打不开网页,那这时候该怎么处理呢。下面,我就为大家介绍下火狐浏览器打不开网页处理方法。 方法步骤 1、在地址栏输入"about:config",按下回车进入设置菜单。 about:config 简介:about:config 命令是火狐浏览器等Mozilla系列浏览器的高级设置的打开命令,其中about:是协议名,代表about协议。 2、找到"https://www.360docs.net/doc/8d13572897.html,eragent.override",如果没有这一项,则点右键"新建"-》"字符串",输入这个字符串。 3、将其值设为IE的UserAgent,如: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)。 补充:浏览器常见问题分析 1.IE浏览器首次开机响应速度慢,需要数秒。搞定办法:IE下选择工

具-internet选项-连接-局域网设置-取消自动检测。 2. IE9图片显示不正常或干脆不显示,尤其是QQ空间搞定办法:工具-internet选项-高级-加速图形-运用软件而非GPU 选择。 3. 打开网页显示【Internet Explorer 已不再尝试还原此网站。该网站看上去仍有问题。您可以执行以下操作:转到首页】搞定方案:工具 -internet选项-高级中关闭【启用崩溃自动恢复】重新启动ie后即开。 4. 下载完所需安全控件也无法运用各种网银,付款时识别不出u盾搞定方案:据提示下载银行安全控件并安装。插上u盾,拿建行为例:在开始菜单里-所有程序-中国建设银行E路护航网银安全组件-网银盾管理工具打开后点击你的u盾并注册。然后重新启动浏览器(一定要完全退出再进) 进入付款网页上方会显示是否允许加载项,选择在所有站点允许。这时候可能还需要再次重新启动浏览器进入付款页面这时候你期待的u 盾密码输入框会出现。这样就ok了 5. 打开网页一直刷新-失败-刷新,无限循环搞定办法:工具-internet 选项-高级-禁用脚本调试。 6. IE 习惯性停止工作或崩溃。搞定办法:工具-管理加载项,一一禁用排除以找到某个插件的问题。由于情况多种多样,有些时候找不到具体原因,我们可以通过重置来搞定工具-internet选项-高级。 相关阅读:浏览器实用技巧 现在打开了台式电脑桌面上的360安全浏览器的主页。点击360安全浏览器顶部菜单,可以看到一个剪刀形状的功能扩展的三角形的下拉菜单, 在下拉菜单中显示有截屏的快捷按钮,还有隐藏浏览器窗口截屏和将网页

Firefox Chrome插件、扩展的区别

插件(plugins)、扩展(extensions)与主题(themes)和语言包(languages)都是附加组件(Add-ons)不同种类。 插件与扩展是完全不同的东西。 Firefox:插件与扩展 插件(Plugins/Plug-ins): 它通常是第三方应用程序提供给firefox使用的二进制文件。也就是说第三方应用程序把相关功能编译成了二进制的机器指令提供给各类浏览器,方便它们调用。 Firefox需要显示某些自身并不能显示的特定文件类型的时候,就会调用与之相关的第三方应用程序提供给firefox的插件来显示它。插件的作用也在于此。 windows下的firefox插件通常是dll格式,linux下的通常是so格式。 例如,Adobe提供给firefox的插件“Adobe reader”使其能直接在浏览器里显示网络上的pdf 文档,而Adobe提供给firefox的另一个插件“Adobe shockwave flash”则使其能显示网页中嵌入的flash。Microsoft提供的“Windows media player firefox plugin”使firefox能播放网页中嵌入的windows媒体(wmv、wma、asf以及对应的播放列表格式)。 扩展(extensions): 它通常是扩展开发者为了修改或者增强firefox本身的功能而提供的一种打包格式。它通常由包含功能代码的js脚本、包含界面的xul文件以及包含皮肤的css文件和各种图像文件组成。少数特定平台下的扩展可能还会附带一些二进制文件。 ?Firefox扩展是什么? 官方定义:它是用于给Firefox增加一些实用新功能的附加组件。 使用的技术: ○XUL: 一种基于XML的用户界面语言 ○CSS,DOM,JavaScript ○XPCOM: 跨平台的COM(COM 的全称是Component Object Model 组件对象模型。)技术,基本原理与微软的COM类似 ○XPConnect: 将JavaScript和XPCOM连接起来,即可以让XPCOM组 件被脚本化,在js代码中调用,也允许使用js来开发XPCOM组件 开发,相当于“胶水”。 ○RDF: 资源定义框架,用于保存扩展的注册信息和描述信息 扩展的格式都是xpi后缀的。其实是zip格式打包的。 常见的扩展有noscript、adblock plus等。

MozillaFirefox火狐浏览器使用方法与技巧大全

点击下面快速链接内容选项: 关于Mozilla Firefox 分页浏览 调整文字大小 同时将多标签加为书签 从搜索框彻底删除搜索引擎 一键访问最喜爱的网页 加快加载速度 用于Firefox的谷歌工具栏 快捷键 清除缓存 更改语言 Firefox的用户配置文件的问题 导入其他浏览器设置 更新Firefox浏览器 关于Mozilla Firefox Mozilla Firefox浏览器以其稳定性、可靠性和创新性的特点已经获得好评如潮。 ?弹出式窗口拦截器- Firefox包括一个综合的弹出式窗口拦截器,让用户而不是网站来决定何时应该弹出新的窗口。Mozilla会继续设置标准,帮助用户避免烦人的弹出式窗口。 ?在线欺诈保护- Firefox的帮助用户保护自己免受在线欺诈,如“钓鱼” (企图诱骗用户泄露他们的密码)和“欺骗”(把网站伪装成流行的、 受信任的站点)明确涉及到用户显示真实身份安全性的网站。 ?更快、更方便、更容易搜索- Firefox将领先的搜索服务融合到工具栏中,其中包括谷歌搜索,雅虎, eBay ,亚马逊, https://www.360docs.net/doc/8d13572897.html, 等等。新的Firefox起始页还提供了Firefox的信息、资源和应用技巧,再加上一 个综合的谷歌搜索框。

?更有效率的浏览- Firefox的创新使许多需要多标签浏览的网页加载在同一窗口,提高网页浏览的速度。 Firefox也推出在线书签,使用户能够 很方便地就能知道最新新闻和博客的头条新闻。 ?可以用数百个附加组件来扩展火狐的功能 -到今天为止已经有100多个扩展可用于Firefox,包括https://www.360docs.net/doc/8d13572897.html, ,谷歌,和Yahoo !另外你也可以 使用工具栏,使Firefox变得可自定义的和更方便使用。 ?迁移变得更加容易-用Firefox可以很容易地从Internet Explorer和其他浏览器。导入您现有的书签,密码, Cookie 和其他数据。 免费下载Mozilla firefox安装版: https://www.360docs.net/doc/8d13572897.html, 另外如果你想要下载firefox绿色便携版,以方便放在U盘或才其它移动硬盘,防止重装系统造成数据丢失的话,请点击下载:MOZILLA FIREFOX浏览器,便携版,真正可以在U盘里运行的火狐浏览器 [ Top ] 分页浏览 在Mozilla firefox浏览器中,在同一个浏览器窗口中可以同时打开好几个窗口,而不是打开另一个全新的窗口。方法如下: ?选择文件 > > 新建标签或者: ?右键点击任何一个标签,并选择新标签 使用键盘快捷键: ?CTRL +T [ Top ] 调整文字大小 启动Mozilla并选择“查看” > 文字大小。选择增加或减少文字直到你想要的大小字体显示出来。另外也可以采用以下方法来改变字体的大小。 1、使用键盘快捷键: ?按CTRL + (按住Control键和再连续按“ + ”键)增加文字大小。 ?按CTRL –(按住Control键和再连续按“–”键)减小文字大小。 2、使用鼠标方式: 同时按住Ctrl键,使用鼠标滚轮来调整文字大小。 ?向上滚动将减少文字大小。 ?向下滚动将增加文字大小。

firefox火狐浏览器使用技巧大全

Mozilla Firefox是一个自由的,开放源码的浏览器,适用于Windows, Linux 和MacOS X平台,它体积小 速度快,还有其它一些高级特征. 1.任意缩放文字大小 在IE浏览器中,我们只能对文字的大小进行五个级别的调节,但是在火狐浏览器Firefox中,我们可以任意地缩放文字的大小。操作的方法很简单,只要点击菜单“查看→文字大小”,在子菜单中就可以看见放大、缩小和正常三个选项,点击相应的选项就可以了,而且还可以用快捷键来快速的设置。 2.搜索收藏夹里面的网页 在收藏夹中收藏了很多网站地址,平时又不太整理,所以当要找其中一个网站地址的时候就会很麻烦,在火狐浏览器Firefox中可以对收藏夹进行搜索。点击菜单“书签→管理书签”,在弹出的“书签管理器” 中输入要搜索的关键字,按回车后就可以搜索到收藏夹中相关的网站名称和地址了。 3.查看部分源代码 在火狐浏览器Firefox中除了可以用“查看→查看源代码”查看网页的源代码外,还可以查看网页局部的源代码,只要我们用鼠标选中要查看源代码的部分,然后点击鼠标右键选择“查看选中部分源代码”,这时就会弹出一个显示源代码的窗口,里面选中的部分就是网页中选中部分的源代码。 4.设置多个页面为首页 在IE浏览器中只能设置一个网页为首页,现在用Firefox就可以设置多个首页。先用火狐浏览器Firefox浏览器打开要设置为首页的多个网站,接着点击菜单“工具→选项”,在选项对话框中点击桌面的“基本信息”,然后在“主页”栏中点击“使用当前的多个页面”按钮就可以把当前打开的几个页面同时作为首页。 编辑提示:如果要设置为首页的网站已经保存在收藏夹中,点击该窗口中的“使用书签”按钮,从收藏 夹中来选择网站作为浏览器的首页。 5.有选择的删除Cookies Cookies文件在火狐浏览器Firefox中可以有选择的进行删除,这样我们就可以删除无用的Cookies 了。点击菜单“工具→选项”,在选项对话框中点击左面的“隐私”,接着在右面点击“Cookies”,在显示的内容中点击“已存储Cookies”按钮。然后就可以在弹出的窗口中看到本地电脑中保存的所有Cookies,在上面选中要删除的,再点击下面的“移除Cookie”按钮就可以删除了,如要删除全部就点击“移除所有 Cookie”按钮。 火狐浏览器Firefox还可以对用浏览器直接下载的文件进行管理,点击菜单“工具→下载项”会弹出“下

FireFox火狐常用插件介绍

1. Firefox Portable 这个东西其实严格说来不能算是插件。他中文名字是“便携版火狐”,说白了,也就是绿色版火狐。之所以把他放在第一位是因为他的配置完全绿色保存,包括插件,主题,扩展,使用习惯等,你甚至可以把它放在你的U盘里,走哪用哪,完全不怕重装系统带来的放哪所。这太重要了,想一想每次装完系统最痛苦的是什么?没错,装软件,装驱动。同理,每一个Firefox用户都至少有几个必备插件,如果每次重装系统都要重装Firefox,进而重装所有插件……自己想吧,呵呵。 2. IETab 这可是个好东西。前面说了,很多网页在Firefox上的显示效果并不好,遇到这种情况,以往我们的做法是关掉Firefox,打开IE。而现在不同了,因为我们有了IETab。这个插件的作用就是调用IE核心!有了这个插件,你可以随时切换FireFox的内核,如果你发现页面排版很乱,那么试试点击一下右下角火狐图标一样的小图标,这时这个图标会变成IE经典的蓝色e图标,这就表示现在是在用IE浏览这个网页了,怎么样,一切正常了吧?什么?还不对?那一定是他们的网页做出问题了。 3. Foxmarks/ Xmarks 别误会,这是同一个插件。之前的版本叫Foxmarks,在某个版本之后改名叫Xmarks。说起来从这个插件开始这次介绍的第一款真正含义以上火狐的功能插件吧(前面两个,一个是便携版,一个是调IE,呵呵)。这个插件的功能太强大了,他的作用是在多台电脑间同步你的书签(也就是IE里的收藏夹)。具体来说,你一定有这样的体会,当你用IE的时候,当你重做系统的时候,当你又一不小心忘了备份你的收藏夹的时候,或者当你去网吧或公司换了一台电脑而没带备份的收藏夹的时候,那么恭喜你,重新收藏吧。 Firefox就可以完全避免此类情况的发生。通过Xmars插件,你可以在该插件的公司注册帐号,之后本地的收藏夹会同步到该公司的服务器上。同步是什么意思?简而言之,就是让服务器上的数据和你本机的保持一致。所以,假如你第一次使用这个插件,他会把你本地的所有书签,按照你的分类格式上传服务器。那么当你下班回家,打开Firefox,他会自动从服务器上下载下来。同样,这时候你又新收藏了一个网页,他也会自动把这个新增加的书签上传,你第二天到公司打开Firefox 就会发现,书签已经自动更新了。怎么样,很酷吧!如此一来,你再也不用担心收藏夹丢失的事情了,即使你所有的电脑同时全部重做系统,那么你要做的也仅仅是下载Firefox,安装Xmarks插件,接下来的事情,就是等着看你的书签重新出现吧! 当然,如果你使用的第一条中提到的绿色版,那就更简单了,那里是一个完整的Firefox,当然,也包括你的书签。 4.Adblock plus 这个东西其实现在IE 上也有了,就是屏蔽广告。但是他的效果可比IE好得多了。除了常规的屏蔽弹出广告窗口功能外,更可以让你自定义屏蔽内容。现在的网络是很不干净的,弹出窗口早已不是唯一的广告途径,到处充斥着乱七八糟的图片,浮动广告,但是有了Adblock plus,你只要在图片,flash等元素上右键->过滤图片/过滤帧等,一切就清静了。 5.Firebug 这个插件对于从事网页开发的人来说简直是太棒了!所有开发网页的同学都知道,javascript这个东西是很烦人的,尤其是调试的时候,尤其尤其是在IE 下调试(现在IE8好

火狐插件介绍

标签页管理 Tabbrowser Preferences - 增强式标签页浏览扩展,提供一个很全面的图形界面,以便让用户能够轻松更改Firefox中的隐藏设置,让Firefox的标签 页浏览功能更加强大和完善,并提供关于链接打开方式的详细设置。 Tab Mix Plus - 在页签上增加了更多的功能,允许你在一个页签上打开多个 链接,或者在多个页签打开同一个链接,合并或者关闭同一个域名的链接等。 Restart Firefox - 在文件菜单中加了一项“重启firefox”,在安装 扩展或插件后,使用这个插件可以很方便,不用关闭FireFox。 Sessionsaver - 恢复上一次打开的页面,如果你上次用过FireFox的话,这对于崩溃的FireFox同样有效。 Duplicate Tab - 允许你在新窗口或当前窗口复制相同的页签(包括浏 览历史等)。 Colorful Tabs - 可以让打开的标签变成彩色的,使得界面美化。 Viamatic foXpose - 在状态栏上增加一个图标,点一下就可以打开所有 的页签。 Firefox Showcase - 简化定位和选择当前窗口的操作。 Separe - 帮助整理当前页签。 Permatabs - 使得一个被选定的页签不能被关闭,并且永远驻留在内存。 FaviconizeTab - 调整页签的宽度,并且只显示图标。 网页链接管理 Linky - 下载选中内容中的所有的网页、图像、文件链接等等。 WebMailCompose - 让网页上的发邮件链接自动转移到web邮件的发送邮件地址。 Linkification - 使得FireFox可以在查看纯文本的时候识别链接地址 并打开链接。 IE Tab - 使用IE内核访问网页。对于只支持IE的页面特别有用。 FirefoxView - 在IE中使用FireFox打开当前的页面。 Paste and Go - 让你粘贴URL到地址栏后自动打开页面,或者使用快捷 键Ctrl-Shift-V。 ErrorZilla - 修改默认的404错误页面为一个Google的缓存页面。

火狐浏览器Firefox常用所有插件详细配图介绍

火狐浏览器Firefox常用所有插件详细配图介绍(站长强烈推荐) 关于“火狐浏览器有...”的内容 本站搜索更多关于“火狐浏览器有下视频的插件没”的内容 现在火狐很火,火到几乎所有的网站都有推荐使用火狐的广告。我用过一段时间,的确防毒功能,防恶意插件等不错,但火狐使用也很困难,尤其是打开火狐感觉也很慢。其实只要你好好配置,它就很好用了,详细教程如下!---------站长编辑 Firefox下载好后总是要配置很多的插件才能用的好。初学者总是觉得麻烦。以下介绍以下我常用的插件,基本上覆盖了日常需要的功能.配置这些好像很麻烦,但是只需要一次即可。Windows用户有个非常简单的方法保存这些配置。 方法是:首先在我的电脑/工具/文件夹选项/查看中,选中显示隐含文件。 然后将以下两个路径的文件夹另存在安全的地方就可以。 C:\Documents and Settings\Your Name\Application Data\Mozilla\Firefox C:\Documents and Settings\Your Name\Local Settings\Application Data\Mozilla\Firefox Your Name是你的用户名。 重装系统后,只要把上述两个文件夹保存到原路径,即可以恢复你以前的保存的所有Firefox中的设置/插件/浏览历史等内容。 在工具/附加软件/插件里能找到已经安装的插件列表。

1. Adblock Plus 下载地址:https://www.360docs.net/doc/8d13572897.html,/firefox/125/ 这个是用来过滤网站上的广告的,比如sina首页上的漂浮广告。安装后我们进入下面的网站来订阅实时更新的过滤地址列表: https://www.360docs.net/doc/8d13572897.html,/en/subscriptions

firefox 插件 开发(3)-基于QT的firefox插件

Qt 开发浏览器插件 Qt的Browsesr Plugin框架,通过简单的办法将widget或者objects编程浏览器支持的插件(支持Netscape LiveConnect APIs的浏览器)。 Netscape, Mozilla FireFox and Opera 支持Qt的插件。ActiveQt用来支持IE的插件ActiveX。 1.下载qtbrowserplugin- 2.4_1-opensource.zip 参考网站: https://www.360docs.net/doc/8d13572897.html,/products/appdev/add-on-products/catalog/4/Utiliti es/qtbrowserplugin/ 我将下载后解压的文件放在 D:\QT-VS2008_Develop\qtbrowserplugin-2.4_1-opensource 然后按照INSTALL.TXT上的内容来编译例子和安装帮助文件等。 (1)编译例子 从命令行进入D:\QT-VS2008_Develop\qtbrowserplugin-2.4_1-opensource后,首先qmake 然后make (2)安装帮助文档 2.windows 下用vs2008+qt编译插件,并测试插件 如果没有Vs2008与qt的编译环境,需要建立环境。 (1)新建Qt工程 A. 选择Qt Applilcation 名称为qtwebpluginstest。 B.点击OK后,点击Finish即可建立工程 (2)打开文件qtwebpluginstest.ui, 在Qt Desiner中拖拽PushButton放置于窗口,修改其名称为“点击我吧”。

如何彻底解决firefox火狐浏览器与adobe flash player插件的卡顿问题

如何彻底解决firefox火狐浏览器与adobe flash player插件 的卡顿问题 Mozilla出品的Firefox浏览器(俗称火狐),凭借高度自定义组件,开源的内核,较高的安全性,丰富的扩展应用,一直是小编的最佳的浏览器之选。火狐浏览器更新速度很快,现在迎来了最新版本号24,熟悉Firefox浏览器的用户对于Adobe出品的flash插件,可以说是爱恨交加。这个小小视频插件常常造成Firefox 浏览器上网延迟,卡顿,甚至未响应,最终是插件奔溃。 其中最严重的案例就是Firefox 13和当时的Adobe flash player 11.3插件,由于flash player 11.3引入沙箱安全机制,造成火狐一直无法发挥正常状态,甚至奔溃。与谷歌chrome浏览器自带flash player插件不同,Firefox浏览器需要用户手动安装flash插件,于是新旧版,官方版,beta测试版各种版本的flash player 插件都需要Firefox去测试兼容性,因此小编建议用户可以及时更新最新版的官方flash player插件。 最近在win8,win8.1系统上,也发现firefox新版与flash player 11.8之间不和谐的问题。从flash player11.3开始,新版的插件都引入了安全沙箱技术。但是这个沙箱技术与谷歌chrome独立进程,独立沙箱机制相比,差的很远。如果adobe flash player沙箱技术真有效,那频频被攻陷,频频升级的,却又是flash插件。所有小编建议,如果要彻底解决firefox火狐浏览器与adobe flash player插件的卡顿问题,最直接方法是禁用flash插件,最高级方法就是禁用flash player的安全沙箱技术。浏览器上网保护还是交给人脑或者安全软件更可靠。 为此,Adobe官网也给出解决方法,虽然是针对旧版11.3的解决方案,但一直适用新版的11.x版本: 禁用安全沙箱技术,主要通过修改mms.cfg解决:

火狐浏览器兼容整理方案

《firefox与IE 浏览器兼容整理方案》 keywords: javascript;css;firefox;ie;区别 1. document.formName.item("itemName") 问题 说明:IE下,可以使用document.formName.item("itemName")或 document.formName.elements["elementName"]; Firefox下,只能使用document.formName.elements["elementName"]. 解决方法:统一使用document.formName.elements["elementName"]. 2.集合类对象问题 说明:IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象. 解决方法:统一使用[]获取集合类对象. 3.自定义属性问题 说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性. 解决方法:统一通过getAttribute()获取自定义属性. 4.eval("idName")问题 说明:IE下,,可以使用eval("idName")或getElementById("idName")来取得id 为idName的HTML对象;Firefox下只能使用getElementById("idName")来取得id为idName的HTML对象. 解决方法:统一用getElementById("idName")来取得id为idName的HTML对象. 5.变量名与某HTML对象ID相同的问题 说明:IE下,HTML对象的ID可以作为document的下属对象变量名直接使 用;Firefox下则不能.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。 解决方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义. 6.const问题 说明:Firefox下,可以使用const关键字或var关键字来定义常量;IE下,只能使用var关键字来定义常量. 解决方法:统一使用var关键字来定义常量. 7.input.type属性问题 说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写.

制作自己的绿色版 Firefox 火狐浏览器

制作自己的绿色版Firefox 火狐浏览器?将自制的绿色浏览器放到U 盘里,揣在口袋中随身携带?自己动手DIY 的时代已经来临!! 一般来说,Firefox 火狐浏览器的用户都喜欢自己动手配置扩展,自定义快捷键,修改使用偏好等等自定义行为,因为这样才能得到自己用起来得心应手的浏览器。毕竟当今信息社会,浏览器是我们接收信息,进行交流的基本而且重要的工具。如果有一天,你突然要到外地或其他的什么地方,或者要在别人的电脑上工作,面对陌生的浏览器或陌生的配置,这个滋味可不太好受。如果能将自己熟悉的使用环境和配置任意移动到其他计算机上进行部署,这将是一件多么快意的事情。接下来我们就来看看DIY Firefox 绿色版的教程。 制作绿色版Firefox 火狐浏览器有三个要素: 1. 安装文件夹下的所有文件 2. Profile 文件夹下的所有文件 3. 一个引导文件,可以自己制作一个bat 批处理文件 推荐的方法步骤: 1. 下载 Firefox 安装程序,然后将Firefox 安装好,比如说安装到D:\Program Files 在该目录下就会有一个Mozilla Firefox 的文件夹。这就是第一个要素。 2. 安装好后不要急于启动Firefox。先来指定它的配置文件夹位置 在Firefox 的快捷方式上点击右键,选择属性

这时会弹出属性对话框,然后选择"快捷方式"标签页,并在“目标”栏位中的最后加上 -profile Profile 这样就可以指定Profile 配置文件夹的位置了。通过这个快捷方式启动Firefox 后,程序会在Mozilla Firefox 文件夹下建立Profile 文件夹。这个就是我们需要的第二个要素。 3. 将你常用的扩展安装好。在这种情况下扩展中没有任何配置。 如果你以前使用Firefox,我们可以通过FEBE 扩展将你以前Firefox 上的扩展和配置备份后 还原到这个新安装的Firefox 上,这样就可以将扩展连同配置一网打尽。当然可能有少部分的漏网之鱼,可能需要手工配置。 4. 现在我们可以把Profile 文件夹剪切到Mozilla Firefox 文件夹的同一目录下。 并建立一个纯文本文件,输入命令 start "" "Mozilla Firefox/firefox.exe" -profile "Profile" 保存纯文本后,将后缀名改为bat 。这就是第三个要素引导文件。 5. 如果你不喜欢bat,还可以将它编译为exe 可执行文件

linux 下火狐浏览器插件开发

火狐浏览器插件开发 参考资料:https://www.360docs.net/doc/8d13572897.html,/tmy13/item/14ab45971e76511e924f41ba 1.下载sdk:https://https://www.360docs.net/doc/8d13572897.html,/en-US/docs/Gecko_SDK 我的是下载这个版本。 xulrunner-1.9.0.17.en-US.linux-i686.sdk.tar.bz2 解压到/home/chjan/下命名为xulrunner-sdk 2.下载np_entry.cpp,npn_gate.cpp,npp_gate.cpp,plugin.cpp,plugin.h,resource.h文件https://www.360docs.net/doc/8d13572897.html,/seamonkey/source/modules/plugin/samples/npruntime/ 将其放入同一目录下/home/chjan/FireFox/ 3.生成so动态链接库: 3.1修改cpp文件:

a. 方法一: 进入/home/chjan/FireFox/目录下执行: g++ -I /home/chjan/xulrunner-sdk/include -I /home/chjan/xulrunner-sdk/include/java -I /home/chjan/xulrunner-sdk/include/nspr -I /home/chjan/xulrunner-sdk/include/plugin -shared -o libnprt.so np_entry.cpp npp_gate.cpp npn_gate.cpp plugin.cpp 生成libnprt.so文件 b. 方法二: 在eclipse开发工具中编译: 新建名为plugin的C++工程: 将np_entry.cpp,npn_gate.cpp,npp_gate.cpp,plugin.cpp,plugin.h,resource.h文件拷到plugin工程下

火狐浏览器崩溃解决方法

Adobe Flash更新到11.3之后,为火狐引入Flash沙盒安全模式,但同时,又造成了部分兼容性问题,导致Windows vista 及Windows7上部分火狐崩溃,并致使一些使用Flash的网站,例如:人人网网页图片上传工具及其他使用flash上传工具的网站无法正常工作。 目前火狐正在配合Adobe公司修复Flash插件的这一问题。出现问题的朋友可以参考以下步骤,手动关闭Flash沙箱安全模式,解决部分崩溃及冲突问题。 修复步骤如下: 1.使用管理员权限打开记事本或者其他文本编辑器; 在开始菜单的输入框中输入notepad,然后在上方的搜索结果notepad上右键,选择“以管理员方式运行”。 并在弹出对话框中点击“是”。 2.然后在弹出的记事本窗口中,从菜单文件→打开中,选择打开以下的路径: Windows32位系统:C:\windows\system32\macromed\flash

Windows 64位系统:C:\windows\syswow64\macromed\flash 关于系统类型的查看,在桌面图标“计算机”上右键,属性,就能看到。 然后将打开类型选择为所有文件,就能看到一个叫做mms.cfg 的文件,打 开它。

3.打开之后,在文件最后加上一行(需要在英文输入法状态下): ProtectedMode=0 最后文件→保存即可,如果提示保存错误,注意是否是由管理员方式启动的记事本编辑器。 确认修改完毕后,重启火狐,一般就不会再有Flash崩溃或者其他兼容性问题了。 此外,也建议各位火狐用户等待Adobe官方彻底修复崩溃问题再进行新版本的更新。

火狐插件——web攻防常用组件

目录 一、火狐浏览器介绍 (2) 二、如何在火狐里添加组件 (2) 三、安全研究常用的火狐插件 (4) 3.1 Firebug (5) 3.1.1Console控制台 (5) 3.1.2 html查看器 (5) 3.1.3 CSS调试 (6) 3.1.4 可视化的CSS尺标 (6) 3.1.5 网络状况监控器 (7) 3.1.6 JavaScript调试器 (7) 3.1.7 DOM查看器 (8) 3.2 Hackbar (8) 3.2.1 功能介绍 (9) 3.3 User Agent Switcher (10) 3.4 FoxyProxy (11) 3.5 XSS Me (11) 3.6 Add N Edit Cookies (11) 3.7 HackSearch (11) 3.8 Wappalyzer (11) 3.9 Tamper Data (12)

一、火狐浏览器介绍 Firefox是一个出自Mozilla组织的流行的web浏览器。Firefox的流行并不仅仅是因为它是一个好的浏览器,而是因为它能够支持插件进而加强它自身的功能。Mozilla有一个插件站点,在那里面有成千上万的,非常有用的,不同种类的插件。一些插件对于渗透测试人员和安全分析人员来说是相当有用的。这些渗透测试插件帮助我们执行不同类型的攻击,并能直接从浏览器中更改请求头部。对于渗透测试中涉及到的相关工作,使用插件方式可以减少我们对独立工具的使用。 下面我们会列举了一些流行的和有趣的Firefox插件,这些插件对渗透测试人员来说是非常有用的。这些插件是多样的,有信息收集工具,也有攻击工具。使用那些你认为有用的插件就可以了。这里面也有一些需要额外付费的插件 二、如何在火狐里添加组件 1、打开火狐浏览器,在左上角有一个橙色的“Firefox”的按钮,点击按钮弹出列表,在列表里面有一个“获取插件”,请单击获取插件。如下图:

我的Firefox插件开发之旅

转自:http://www.cppbl https://www.360docs.net/doc/8d13572897.html,/epubcn/archive/2008/11/07/66206.html 我的Firefox插件开发之旅 (1)——从零开始 准备做一个Firefox插件,用来接收从WEB页面传递的参数,根据这些参数从服务器上下载一些文件到本地,并调起本地的一个应用程序。 以前在IE中是使用一个ActiveX来实现的。FF的插件从来没有做过,不知道将来会遇到多少困难。 在网上发现一个页面:https://www.360docs.net/doc/8d13572897.html,/code/mozilla/extensionwiz/,它提供了一个FF扩展的生成向导,填写完必要信息后,会生成一个zip文件。之后我改名为xpi后,丢到我的FF 3.0中,提示不正确的安装包。看来这个向导针对FF3还有些问题。具体问题是什么?现在还不清楚。让我来继续寻找资料…… 在Mozilla网站上了解到,FF的Extension和Plugin是两种概念的东西: Extension就是一个zip包,里面有规定的一些必要文件。这个可以下载几个插件看一下他们的目录结构就好了。我下载了一个QuickNote,看了一下,主要包括一个install.rdf(安装包相关信息和文件资源路径等配置)、chrome.manifest(设置各种XUL文件路径以及其他的一些资源文件路径)、chrome文件夹(里面放着插件的所有源文件),不过chrome文件夹里面的文件我还没有过多研究。 Plugin好像是另外一码事了,在Mozilla Developer Center的Plugin开发介绍文中有这么一句:Plugins are different from extensions, which m odify or enhance the functionality of the browser itself. Plugins are also different from search plugins, which plug additional search engines in the search bar. (插件与扩展不同,它更改或者改善了浏览器自身的功能。插件与搜索插件又不同,搜索插件在搜索工具栏上添加了额外的搜索引擎。) 我的理解,插件可以让你在FF中使用自己的View来展示、用自己编写的二进制文件来做某些事情,不仅仅是利用FF自身支持的一些特性和功能。而扩展相对来说就不需要这些东西,只利用FF的开发API就好了。 这样看来,要实现我开始提到的需求,似乎可以开发一个Extension就可以了。Foxmarks Bookmark Synchronizer(FBS)也差不多是我的需求这种感觉:将本地某些数据上传至服务

火狐插件介绍

火狐插件介绍 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

标签页管理 Tabbrowser Preferences - 增强式标签页浏览扩展,提供一个很全面的图形界面,以便让用户能够轻松更改Firefox中的隐藏设置,让Firefox的标签页浏览功能更加强大和完善,并提供关于链接打开方式的详细设置。 Tab Mix Plus - 在页签上增加了更多的功能,允许你在一个页签上打开多个链接,或者在多个页签打开同一个链接,合并或者关闭同一个域名的链接等。 Restart Firefox - 在文件菜单中加了一项“重启firefox”,在安装扩展或插件后,使用这个插件可以很方便,不用关闭FireFox。 Sessionsaver - 恢复上一次打开的页面,如果你上次用过FireFox的话,这对于崩溃的FireFox同样有效。 Duplicate Tab - 允许你在新窗口或当前窗口复制相同的页签(包括浏览历史等)。 Colorful Tabs - 可以让打开的标签变成彩色的,使得界面美化。 Viamatic foXpose - 在状态栏上增加一个图标,点一下就可以打开所有的页签。 Firefox Showcase - 简化定位和选择当前窗口的操作。 Separe - 帮助整理当前页签。 Permatabs - 使得一个被选定的页签不能被关闭,并且永远驻留在内存。 FaviconizeTab - 调整页签的宽度,并且只显示图标。 网页链接管理 Linky - 下载选中内容中的所有的网页、图像、文件链接等等。 WebMailCompose - 让网页上的发邮件链接自动转移到web邮件的发送邮件地址。 Linkification - 使得FireFox可以在查看纯文本的时候识别链接地址并打开链接。 IE Tab - 使用IE内核访问网页。对于只支持IE的页面特别有用。 FirefoxView - 在IE中使用FireFox打开当前的页面。 Paste and Go - 让你粘贴URL到地址栏后自动打开页面,或者使用快捷键Ctrl-Shift-V。 ErrorZilla - 修改默认的404错误页面为一个Google的缓存页面。 文件下载管理 FlashGot - 多线程下载工具。 PDF Download - 提供浏览者对PDF更多的操控方式,当你点击一个PDF 链接时Firefox会弹出一个对话框供你进行选择性操作:下载、在标签页打开、在新标签页中以HTML方式查看、取消。 ScrapBook - 方便的保存与管理网页。 DownThemAll - 只需一点即可下载网页中的所有连接。

Linux上五十个最佳的FireFox扩展插件

Linux上五十个最佳的FireFox扩展插件 FireFox的扩展插件有成百上千,你要用哪个呢?这里收集了50个流行的扩展插件,下载后安装,会让你的FireFox浏览更轻松。请注意,大多数扩展插件可以在FireFox2.0上使用,如果无法使用,那么使用Nightly Tester Tools扩展来让他们工作。当一个新的FireFox版本发布后,这个扩展插件可以允许你轻松更新这些已经存在的扩展。 标签页管理 All-in-One Gestures - 多合一鼠标手势,集合了流行的滚动、导航等方位插件的鼠标手势。 Tabbrowser Preferences - 增强式标签页浏览扩展,提供一个很全面的图形界面,以便让用户能够轻松更改Firefox中的隐藏设置,让Firefox的标签页浏览功能更加强大和完善,并提供关于链接打开方式的详细设置。 Tab Mix Plus - 在页签上增加了更多的功能,允许你在一个页签上打开多个链接,或者在多个页签打开同一个链接,合并或者关闭同一个域名的链接等。 Restart Firefox - 在文件菜单中加了一项“重启firefox”,在安装扩展或插件后,使用这个插件可以很方便,不用关闭FireFox。 Sessionsaver - 恢复上一次打开的页面,如果你上次用过FireFox的话,这对于崩溃的FireFox同样有效。 Duplicate Tab - 允许你在新窗口或当前窗口复制相同的页签(包括浏览历史等)。 Colorful Tabs - 可以让打开的标签变成彩色的,使得界面美化。 Viamatic foXpose - 在状态栏上增加一个图标,点一下就可以打开所有的页签。 Firefox Showcase - 简化定位和选择当前窗口的操作。 Separe - 帮助整理当前页签。 Permatabs - 使得一个被选定的页签不能被关闭,并且永远驻留在内存。 FaviconizeTab - 调整页签的宽度,并且只显示图标。 网页链接管理 Linky - 下载选中内容中的所有的网页、图像、文件链接等等。 WebMailCompose - 让网页上的发邮件链接自动转移到web邮件的发送邮件地址。 Linkification - 使得FireFox可以在查看纯文本的时候识别链接地址并打开链接。 IE Tab - 使用IE内核访问网页。对于只支持IE的页面特别有用。 FirefoxView - 在IE中使用FireFox打开当前的页面。 Paste and Go - 让你粘贴URL到地址栏后自动打开页面,或者使用快捷键Ctrl-Shift-V。 ErrorZilla - 修改默认的404错误页面为一个Google的缓存页面。 文件下载管理 FlashGot - 多线程下载工具。 PDF Download - 提供浏览者对PDF更多的操控方式,当你点击一个PDF链接时Firefox 会弹出一个对话框供你进行选择性操作:下载、在标签页打开、在新标签页中以HTML方式查看、取消。 ScrapBook - 方便的保存与管理网页。 DownThemAll - 只需一点即可下载网页中的所有连接。 TargetAlert TargetAlert - 可以帮你扫描网页中的所有超链接,在符合特定文件类型的超链接后面,加上一个特定的图标,让你可以不用去看网址就可以知道这是什么类型的文件。 Download Manager Tweak - 修改FireFox默认的下载管理器,使其可以在书签列(侧边列)或标签页中开启下载管理窗口。 Download Statusbar - 让你可以从状态列看出目前下载文件的进度。

相关文档
最新文档