
mozilla
文章平均质量分 69
z6482
这个作者很懒,什么都没留下…
展开
-
NPAPI插件开发详细记录:插件运行流程分析
本文详细分析插件的代码是如何执行的,主要分析np_entry.cpp、npn_gate.cpp和npp_gate.cpp.希望能够有所收获。在windows平台下,插件就是一个dll,注意到这个dll的def文件内容是:LIBRARY ""EXPORTSNP_GetEntryPoints @1NP_Initialize @2NP_Shutdown @3插件接口既然是浏览器原创 2012-06-19 20:04:55 · 16280 阅读 · 10 评论 -
Firefox扩展开发初级教程——开发一个简单的扩展
作为一篇初学者教程,一般第一个扩展都是hello world扩展,我的例子也不例外,也是一个hello world扩展,但是本扩展要实现的功能不是弹出一个对话框显示hello world。而是实现重启Firefox这个功能。为什么要以这样一个功能为例子呢?因为在开发扩展过程中,我们每次对扩展中的文件作出了修改之后,想看看效果都必须重启Firefox。按照上一篇文章那样建立一个bat文件虽然很方便,原创 2012-04-06 19:35:32 · 14891 阅读 · 24 评论 -
提高firefox扩展开发效率
本文介绍一些技巧和开发扩展中使用的工具,主要参考:https://developer.mozilla.org/En/Firefox_addons_developer_guide的第五章(Chapter 5: Let's build a Firefox extension )。如有不清楚的地方可以参考原文,以及在我的博客中寻找这篇文章的翻译版。创建开发者profile详细的资料可以参考:原创 2012-04-05 22:04:00 · 5578 阅读 · 2 评论 -
firefox附加组件开发者指南(六)——firefox扩展及XUL应用程序
本章讨论辅助开发扩展的工具。扩展开发者的工具Venkman, JavaScript 调试器Venkman是一个成熟的运行于firefox中的javascript调试器。它像典型的调试器一样工作,既可以用于开发扩展有可以用于一般的网络开发。由于其与扩展和firefox本身的javascript一起工作。这个调试器还开业作为一种学习设计方法的好方式。安装Venkma翻译 2012-03-13 21:42:38 · 8061 阅读 · 0 评论 -
firefox附加组件开发者指南(五)——创建一个firefox扩展(上)
本章篇幅较长,分上下两部分发布,本章中的图和清单4在原网站中没有,因此这里也没有,感兴趣的可以去原文补充。下面是译文。至今为止,各个章节中独立的介绍了相关的技术——XUL、javascript、CSS和XPCOM。本章中,我们讨论如何将它们放到一起来实际的创建一个扩展。注:那些对诸如netbeans、eclipse等IDE掌握得非常好的开发者的创建Firefox/thunderbird翻译 2012-03-12 21:49:48 · 4964 阅读 · 2 评论 -
firefox附加组件开发者指南(五)——创建一个firefox扩展(下)
开发实用的扩展:一个会话管理扩展这一节,我们将会创建一个实用新特性的扩展:会话存储API。这可以让用户在任何时刻保存和恢复会话快照(浏览器窗口状态)。第一阶段:测试安装图12展示了会话管理扩展的接口。在工具菜单下,会话存储子菜单包含两个项——保存会话和清理会话,在它们之间是一个刚才保存可以恢复的会话清单,最近的在最前面。图12:菜单中的会话管理扩展接口如”会话存储API翻译 2012-03-12 22:14:00 · 7783 阅读 · 0 评论 -
firefox附加组件开发者指南(四)——使用XPCOM:实现高级处理
本章描述如何利用javascript脚本语言使用XPCOM来实现高级的处理。概述Javascript没有类似于用来打开文件以及进行字符编码转换的函数。要实现这些功能需要采用其他机制。IE使用activex来处理,在firefox中我们使用XPCOM(跨平台组件对象模型)。关于XPCOMXPCOM是用来开发独立于平台的组件的一个框架(framework)。在这个框架下开发的组翻译 2012-03-05 19:21:14 · 5526 阅读 · 0 评论 -
firefox附加组件开发者指南(二)——开发扩展过程中使用的技术
在深入阐述之前,我们快速的介绍一下用来开发firefox扩展的技术。还有为开发firefox必须了解的一些知识。开发firefox扩展用到的技术Firefox及其扩展都是基于当前网络开发广泛使用的技术。其结构与使用在网页中的动态HTML和windows中使用的HTML应用程序是相似的。如果你有开发动态HTML的经验,你就会发现学习开发firefox扩展的技术会相对的轻松。各种技翻译 2012-03-04 14:40:14 · 2271 阅读 · 0 评论 -
用firebreath开发插件
在寻找插件开发资料的过程中找到了一个开发浏览器插件的开源项目——firebreath。参考:firebreath主页。根据其介绍可以实现各种浏览器插件的开发。于是我进行了尝试,并试图搜索利用firebreath开发插件的中文资料。搜索到的相关中文资料有一个:徐凡的博客。其中有使用firebreath开发浏览器插件(一、二、三)三篇关于firebreath开发插件的文章。看完了,但是还是不怎么会。原创 2012-04-22 17:12:13 · 20495 阅读 · 4 评论 -
NPAPI插件开发详细记录:实用功能(库的使用及多线程)
有了前面的hello world的经验,本文在其基础上研究一些实用功能的实现。库的动态加载Windows平台下,可以动态的对dll进行加载,使用到的API主要有:LoadLibrary、GetProcAddress、FreeLibrary等。下面以加载winmm.dll为例对相关代码进行简要介绍:动态加载dll,在加载之前先进行typedef,这里以实用winmm.dll中的函数P原创 2012-06-23 23:07:25 · 12831 阅读 · 2 评论 -
NPAPI插件开发详细记录:再谈多线程
前面提到过有关多线程的问题,主要是如何在插件中创建新的线程。但是在编写多个线程的插件过程中遇到的问题比如何创建一个线程要复杂得多。一个问题是多个线程之间共享数据,该问题其实就是普通的多线程编程中也会遇到,如果有丰富的多线程程序设计的经验,那么插件编写中多线程间共享数据的问题也不算什么复杂的问题了。简单提一下我的解决方法:我让多个线程间共享数据采用的方法是首先设计一个基础的数据类,其他要使用共享数据原创 2012-07-20 22:33:31 · 9738 阅读 · 5 评论 -
NPAPI插件开发详细记录:安装包的制作
我们开发好的插件需要交给用户使用的,我们自己在开发的过程中可能有各式各样的方法来使插件可以运行,但是如果要交给用户使用,我们总不至于让用户自己去写注册表,或者让用户将咱们的dll复制到plugins目录下吧!为了让用户的安装操作简单化,介绍两种方法:按照扩展的方式将插件打包这种方式根据浏览器不同需要采取不同的打包方式,比如Firefox需要打包为xpi,而chrome则需要打包为crx。可原创 2013-04-24 10:12:07 · 20699 阅读 · 4 评论 -
NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤
前面一段时间关注了用firebreath开发插件,但是感觉用起来不是那么得心应手,还是回到NPAPI开发插件上来。本文根据NPAPI开发详解,Windows版进行开发,其中以VS2008为例进行开发,在VS2010中基本上是相同的。必须的plugin sdk,将其解压到某个目录下,我这里是:D:\Users\zcf\Documents\My Program\2012。下面是创建插件的步原创 2012-06-13 22:26:57 · 32732 阅读 · 49 评论 -
NPAPI插件开发详细记录:脚本化接口
scriptable接口的实现,与属性有关的函数为HasProperty、GetProperty、SetProperty。在JS中设置属性(以bar为例)用plugin.bar=barvalue;来设置,获取属性直接用plugin.bar;如果要为插件创建属性,必须要在HasProperty中返回true,在GetProperty一般调用NPN_GetProperty(mNpp,sWindowOb原创 2012-07-15 13:54:11 · 13863 阅读 · 7 评论 -
自行设计NPAPI开发框架
经历了一年有余的插件开发,对插件的工作机制也比较熟悉了,在开发插件的过程中使用sdk中的np_entry.cpp、npn_gate.cpp、npp_gate.cpp以及pluginbase.h这几个文件,极大的提高了插件开发的效率,使开发过程变得简单高效,但是在使用的过程中也发现了一些不足之处以及一些细微的bug。在开发过程中我已经对这几个文件进行了不同程度的修改以满足我的开发需求。虽然修改了能满原创 2012-12-21 14:57:31 · 11480 阅读 · 7 评论 -
NPAPI插件开发详细记录:实用功能——添加、识别私有属性
据我所知,除了通用属性如:id、class等,object标签的属性有type、data、width、height,embed标签的属性有type、src、width、height。而flashplayer插件所具有的loop、autoplay等属性都是插件自己添加的,无法用NPN_GetProperty接口进行获取。假设我们要开发一个插件允许使用loop属性,那该怎么实现呢?这个就要找到NS原创 2012-12-16 16:08:46 · 9572 阅读 · 0 评论 -
NPAPI插件开发详细记录:实用功能——获取插件路径、页面路径、资源路径
获取插件路径该功能不复杂,不过使用了windows提供的API故只适用于windows平台。代码如下: LPTSTR moduleName = new TCHAR[100]; GetModuleFileName(GetModuleHandle(_T("name")),moduleName,100); std::string mPath = std::string(moduleNam原创 2012-12-16 16:06:05 · 12003 阅读 · 0 评论 -
NPAPI插件开发详细记录:实用功能——改变插件窗口大小
我们有时候需要调整插件窗口的尺寸大小,比如说,当你创建一个视频播放窗口,在用户点击播放之后想要将窗口的大小调整为视频的实际大小。播放完毕之后又将窗口尺寸调整回原来的尺寸大小。要实现这样一个功能,最简单的方式是写JS来实现,只需要首先用getElementById获取插件,然后设置其width属性和height属性。但是,通常情况下我们只管编写插件,不负责网页的设计,如果我们设计完一个插件,还要原创 2012-12-16 15:56:26 · 11373 阅读 · 0 评论 -
NPAPI插件开发详细记录:插件开发入门
为什么这还是入门呢?因为前面的我们什么都没学会,只是学会了建立一个dll项目,并生成了一个Firefox可以识别dll,在测试页面中不会弹出需要下载插件的错误。而任何功能都没有实现。所以这里才是真正的入门。本文随着作者本人的学习进度逐渐深入,难免有不周全之处,请看到本文的朋友帮忙指出有误的地方。插件窗口在哪里入门篇暂时只讲述一个问题,根据我的理解,plugin创建时,浏览器会创建一个子原创 2012-06-14 23:07:25 · 20253 阅读 · 17 评论 -
firefox附加组件开发者指南(三)——XUL简介(中)
XUL中可用的窗体部件根元素XUL文档使用不同的根元素来实现不同的目的。本节我们将会看到三种典型的根元素:window、page和dialog。根元素使用windowtype属性作为这种类型的窗口的标识符。例如,Firefox使用navigator:browser作为其浏览器窗口的windowtype,使用Browser:Preference作为其选项窗口的windowtype。使用将翻译 2012-03-04 16:21:48 · 3817 阅读 · 0 评论 -
Firefox附加组件开发者指南(一)——扩展简介
https://developer.mozilla.org/En/Firefox_addons_developer_guideChapter1: Introduction to extensionsChapter2: Technologies used in developing extensionsChapter3: Introduction to XUL—How to build翻译 2012-03-04 14:13:39 · 5787 阅读 · 1 评论 -
自定义protocol之newChannel
前面对实现新的protocol进行了研究,本文描述一下在实现protocolhandler时遇到的newChannel方法的实现。研究得不是很透彻,希望有人能与我进行交流。前面研究得到的结论是newURI方法中返回一个nsIURI类型的uri。这个uri的protocol如果不是firefox可以直接处理的protocol,而是我们实现的protocol,那么就会调用我们实现的protocol原创 2012-01-11 20:55:03 · 1103 阅读 · 0 评论 -
firefox调试记录8——小结
我调试跟踪firefox源代码的目的是找到firefox加载网页文件到渲染页面这个过程的处理代码,我的这个目的到现在为止还没达到。但是对firefox的源代码进行跟踪和调试所涉及到的内容也基本上就是这些了。因此做一个关于调试跟踪的小结。先说明一下我使用的相关软件、程序的版本等信息吧,操作系统是win XP;Visual Studio是2010版;firefox的源代码是8.0版本的;编译fir原创 2011-12-26 20:32:23 · 1605 阅读 · 1 评论 -
firefox调试记录5——事先确定profile情况下的跟踪
我发现的相似的东西如下两图所示:第一张图是开始运行时的堆栈调用情况,第二张图是新建进程之后,中断时的堆栈调用。我发现的相似的地方是两个进程的入口函数都一样是firefox.exe里面的wmainCRTStartup函数,而其后依次调用了__tmainCRTStartup、wmain、NS_internal_main、do_main、XRE_main。这些都是一样的,而之后就不一样了原创 2011-12-16 16:13:42 · 1123 阅读 · 0 评论 -
firefox调试记录4——关于跨进程的调试
前面弄清楚了一个问题,只要执行的时候需要用户选择profile,那么选择完profile之后就会创建新的进程来创建firefox。我的想法很直接,只要我能够跟进这个新创建的进程然后一步一步的跟着程序走就可以找到firefox运行过程中是如何打开窗口,如何打开网页的了。于是我在网上各种寻找资料,不过依然没有找到我想要的东西,找到的最相关的就是多线程的调试,可是我是跨进程的。最后请教高手,虽然他一开始原创 2011-12-16 16:09:27 · 999 阅读 · 0 评论 -
firefox调试记录1——用VS2010调试跟踪firefox8
我需要对firefox进行跟踪调试,以便尽快搞清楚firefox的工作流程。我想用VS2010来做,在网上没有找到操作方法,不过网上有利用VS2005和VS2008进行调试的例子。参照其步骤,我来探究一下如何使用VS2010对Firefox进行调试。参考资料:Debugging Firefox using Visual Studio .NET 2005Debugging Firefox u原创 2011-12-05 22:41:20 · 3759 阅读 · 2 评论 -
firefox调试记录3——其他情况的跟踪
其他情况主要包括:环境设置不做变动,保持默认值。设置为启动firefox时打开空白页/打开主页等环境设置保持默认值直接按F10,开始调试。这一次没有打开profilemanager,而是直接使用了电脑上的默认profile。打开了主页。跟踪依据最开始的跟踪方式,在确定需要跟进的地方按F11,其他地方按F10,不过,在~\firefox-8.0.source\toolkit\xr原创 2011-12-09 18:52:37 · 1251 阅读 · 0 评论 -
firefox调试记录6——Firefox主窗口创建过程研究
到此为止,可以说已经到了firefox比较关键的地方了,其打开过程弄得比较清楚了,现在先来理清楚firefox是如何创建浏览器窗口,并最终展示在用户面前。这里先分析一下AppShell->Run()开始调用到消息循环开始这个过程。当程序运行到~\firefox-8.0.source\toolkit\components\startup\nsAppRunner.cpp第35444行(在函数XRE原创 2011-12-19 21:31:08 · 1162 阅读 · 2 评论 -
firefox调试记录7——打开与修改文件
按照网上其他人给出的方法,打开了firefox工程之后,设置好环境变量,自己就可以打开一些文件,下断点,进行调试等。但是我一直没有找到打开某个特定文件的方法,如下图是firefox工程点击右键时的选项:不过可以添加现有项目,这样可以把firefox.exe目录下的其他测试程序都打开来调试一下,上图中我就打开了TestGetURL等几个测试程序。因此,我总也没找到人家说的打开文件如何打开。后原创 2011-12-19 21:42:05 · 1189 阅读 · 0 评论 -
在firefox中自定义protocol
前面的例子(为firefox添加新的protocol)虽然很详细,但是形式过于古老,无法应用于新的firefox版本中。我对这个进行进一步的研究。有了定制about页面的URL的经验,我打算实现一种新的协议“research”,在地址栏中输入“research:XXX”则显示百度或者谷歌搜索XXX关键词所得到的搜索页面。第一步,看看百度/谷歌搜索关键词之后的URL有什么特征,打开百度,在搜索框原创 2012-01-11 20:45:30 · 1646 阅读 · 1 评论 -
为firefox添加新的protocol
Adding a New Protocol to Mozilla本文讲述如何为mozilla添加一个新的协议。实现该协议将要使用javascript和XPCOM,也包括了将其添加到现有的mozilla程序中。概述Mozilla支持一般的网络协议如HTTP和FTP。有时对现存的mozilla程序进行修改以使其支持一种新的协议非常有用,如此mozilla就可以更好的与其他应用程序集成。翻译 2011-12-30 21:29:13 · 1610 阅读 · 2 评论 -
为firefox定制about页面的URL
在查阅如何注册新协议的过程中发现了一种定制自己的about页面的方式。感觉与添加新协议的过程极为相似。顺便尝试了一下,结果成功了。下面将其过程记录下来。原始页面在:https://developer.mozilla.org/En/Custom_about:_URLs该文章前面部分是针对firefox4之前的,也就是gecko2.0版本之前的,这里我就不描述了,第二部分是针对firefox4原创 2011-12-31 18:15:05 · 1299 阅读 · 0 评论 -
firefox附加组件开发者指南(三)——XUL简介(上)
这一章内容较多,故分三篇:XUL简介、XUL中可用的窗体部件、其他XUL功能。在学习如何开发扩展之前,我们来了解XUL,基于XML的用户接口语言,XUL是扩展的基本组成之一。概述XUL概览XUL是一种基于XML的语言,是为mozilla浏览器的GUI标记语言而开发的。结合HTML和脚本语言去开发用户界面的早期实验经历了很长一个过程,可以认为XUL是这个过程的演化结果。用在win翻译 2012-03-04 15:07:29 · 3246 阅读 · 0 评论 -
firefox附加组件开发者指南——译序
本系列文章很适合作为学习Firefox附加组件开发的参考。其中说明了Firefox扩展开发所需要使用到的技术,并对这些技术进行了简明的介绍。翻译完本系列文章,特别是第五章之后,我对Firefox附加组件开发的理解又深入了一步。最初在MDN上看到这一系列的文章是为了想要搞清楚如何使用XPCOM接口而搜索到的,时间大概是2011年11月份。当时只对第四章比较感兴趣,看了一遍,但是我这人英语水平还不原创 2012-03-04 13:42:03 · 1631 阅读 · 1 评论 -
firefox附加组件开发者指南(三)——XUL简介(下)
其他XUL功能OverlayXUL的一个与众不同的特性就是overlay。可以将多个XUL文档联合起来,并当做一个单独的XUL文档来处理。在Firefox中,这用来对各种功能进行模块化并实现了扩展。通过在XML声明中插入一个xul-overlay处理指令和根元素的开始标签,通过xul-overlay指定的XUL文档会在当前当前的XUL文档读取的同时进行读取。实际显示的XUL文档是原始X翻译 2012-03-04 16:33:15 · 2937 阅读 · 0 评论 -
使用js-ctypes
译注:在学习使用js-ctypes的过程中遇到困难,于是仔细的看了这篇文章并对我感觉重要的地方进行了翻译,加之原文有些地方仍然会有改动。在看译文的过程中如有疑惑,请参考原文。使用js-ctypes导入 ctypes.jsm方法如下:Components.utils.import("resource://gre/modules/ctypes.jsm")加载本地库导入了代码模块之后,可翻译 2012-02-09 21:56:32 · 2651 阅读 · 1 评论 -
使用js-ctypes——处理数据
原文:https://developer.mozilla.org/en/js-ctypes/Using_js-ctypes/Working_with_data创建CData对象使用js-ctypes的数据类型的由CType对象表示的。这些都是javascript构造函数。它们都是可调用的函数,你可以用来创建新的这种类型的CData对象。有几种方式进行创建新的CData对象。创建CD翻译 2012-02-11 14:57:42 · 2426 阅读 · 1 评论 -
使用js-ctypes——声明并调用函数
原文:https://developer.mozilla.org/en/js-ctypes/Using_js-ctypes/Declaring_and_calling_functions函数的声明使用Library对象的declare()方法。一旦声明,函数就可以使用标准的函数语法进行调用。例:无输入参数这个例子中,我们声明libc的clock()函数,其返回值是系统启动之后经历的翻译 2012-02-11 14:57:09 · 1496 阅读 · 0 评论 -
使用js-ctypes——声明类型
原文:https://developer.mozilla.org/en/js-ctypes/Using_js-ctypes/Declaring_types原文标明,本文尚未完成。如有疑问请参照原文。Ctypes对象提供了许多声明类型的方法,每种类型都由一个CType对象表示,CType对象提供了一个构造方法,可以通过调用该方法来定义这些类型的值。使用js-ctypes声明的类型相对于相关的翻译 2012-02-09 22:02:59 · 2423 阅读 · 0 评论 -
firefox调试记录2——Firefox运行流程初步跟踪
前面对firefox打开火狐主页进行了跟踪,跟到了windows API 函数CreateProcess。该函数是创建一个新的进程,我认为要继续跟踪,可能需要进入这里创建的新进程才行。暂且搁下,我现在打算对firefox的运行流程进行一下粗粒度的跟踪,我的想法是一直按F10,直到程序主线程执行完毕,看看firefox在启动过程中和启动之后,程序都执行了哪些步骤。首先将前面下的所有断点禁用,然后原创 2011-12-07 23:35:17 · 2654 阅读 · 0 评论