`
ijj72ijj
  • 浏览: 15829 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Firefox插件开发概述

阅读更多

Firefox插件开发概述
2011年02月15日
  本文译自MDN: https://developer.mozilla.org/en/Gecko_Plugin_API_ Reference/Plug-in_Development_Overview
  最近在学习Mozilla开发,这方面的中文文档甚少,第一次尝试发表译文。本人Mozilla开发知识和翻译水平有限,不当之处请留言指正。
  当确定了插件的功能,编写插件将是一件简单的事情。以下步骤是插件开发过程的基本要点。
  1.插件设计:确定插件程序提供的服务和插件与浏览器之间的交互规则以及插件处理的特殊媒体类型。
  2.确定插件处理的MIME类型和文件扩展名。(译注:MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。)
  3.设置正确的开发环境。你可以通过多种开发环境来创建插件,但必须确保包含了来自mozilla source或者plug-in SDK的文件。(译注:mozilla source)
  4.创建插件项目:你可以在mozilla source提供的相应操作系统(Windows/Unix/Mac OS)的插件示例代码基础上开始编写插件;或者在你自己的开发环境中使用SDK提供的文件创建新的插件项目。关于plug-in SDK和示例使用的更多信息参阅pulg-in SDK目录的README文件。(译注: README文件)
  5.编写插件程序代码,实现插件基本操作所必须的Plug-in API函数。在本章中将看到一些Plug-in API函数。
  6.构建插件。
  7.将插件安装到操作系统特定的插件目录下。
  8.测试和调试插件。
  9.创建HTML页面并嵌入插件对象。要查看插件的行为,可以在浏览器中打开调用了该插件的页面。更多关于HTML元素的使用参阅Using HTML to Display Plug-ins Gecko通过插件所支持的MIME类型来识别不同的插件。当要显示某个特殊MIME类型的数据时,浏览器查找并调用支持此类型的插件对象。这些数据可以是来自HTML文件中的某个object元素(这些object或embed元素直接指定了MIME类型或该类型的文件),或是某个MIME类型的非HTML的单独文件,也可以是服务器上的文件。
  服务器根据传送文件的扩展名查找相应插件所注册的MIME类型(译注:这里的插件应该是指在服务器上的应用程序),然后将该文件传送到浏览器(译注:一般服务器会将MIME标识放入传送数据中以供浏览器识别)。浏览器如果查找到了某插件注册了该MIME类型,就加载该插件程序来处理数据。
  当浏览器启动时,浏览器检测插件系统并安装插件。浏览器综合用户参数和插件目录的内容或windows注册表信息来决定安装哪些插件和确定支持的文件类型。
  一个MIME类型由type(如application和image)和subtype两部分组成。例如image/jpeg。如果要给插件定义一个新的MIME类型,你需要在IETF(Internet工程任务组)进行注册。尚未注册的MIME类型可以在其subtype名称前加上"-x",例如image/x-nwim。有关MIME类型的更多信息,参见以下MIME RFCs: 在不同的操作系统平台上注册插件有所区别。下面各节讲述了特定平台上插件的查找与注册方式。 在Windows上,插件的查找方式参阅 How Gecko Finds Plug-ins
  浏览器通常利用插件在注册表中的信息来确定插件处理的MIME类型及文件扩展名。
  但是,当加载的插件位于一个常规的路径下时必须采用另一种方法。这种情况下,为确保插件文件被加载,其名称必须为"np*.dll"的形式。同时,插件DLL文件的版本信息中包含MIME类型,文件扩展名,文件打开模板名称(file open template),插件名称以及文件描述信息。
  插件DLL内置的版本信息需要包含如下string/value: 在MIME类型和文件扩展名字符串中,用"|"分隔不同类型,例如:
  video/quicktime|audio/aiff|image/jpeg
  只有设置为"US English"语言,并且你的开发环境设置为Windows多语言字符集时,创建的版本信息才会被加载。 暂略 暂略 插件在页面中自绘之前,必须提供这些信息:设置目标窗口,重绘时机和所处理的事件信息。
  一个无窗口插件(windowless plug-in)可以调用以下Netscape函数来自绘: NPN_ForceRedraw:  浏览器主动发送绘制消息给插件?(Force a paint message for windowless plug-ins. ) 
  NPN_InvalidateRect: 在重绘和刷新之前使插件的一块矩形区域变为无效。 
  NPN_InvalidateRegion: 在重绘和刷新之前使插件的一块区域变为无效。 
  浏览器调用以下插件函数: NPP_GetValue: 查询插件信息。 
  NPP_Print: 为插件实例请求特定平台的打印操作。 
  NPP_SetValue: 设置浏览器信息。 
  NPP_SetWindow: 设置插件绘制的目标窗口。 
  NPP_HandleEvent:  发送特定事件给插件实例。
  插件可以调用以下Netscape函数来查询和设置信息: NPN_GetValue: 获取浏览器信息。 
  NPN_SetValue: 设置浏览器信息。
  更多插件绘制内容参阅: Drawing and Event Handling 插件开发者可以利用Plug-in API提供的内存特性来分配和释放内存。 使用 NPN_MemAlloc从浏览器分配内存。
  使用 NPN_MemFree释放NPN_MemAlloc分配的内存。
  使用 NPN_MemFlush Mac OS平台释放内存专用。
  流是一种呈现URLs和数据的对象。一个流对象可以与某个特定的插件实例相关联,而一个插件实例可以拥有超过一个流对象。流可以由浏览器产生供插件实例使用,也可以由插件实例产生供浏览器使用。每个流对象关联一种MIME类型用来识别流对象中的数据类型。
  浏览器产生的流对象可以自动的发送到插件实例或是被插件实例请求。插件可以选择以下几种流传输模式: 普通模式:当流数据可用时浏览器将流数据连续的发送给插件。
  随机存取模式:浏览器允许插件请求流数据中任意的字节段。此模式需要服务器支持。
  文件模式:浏览器保存流数据到本地缓存文件并将文件路径传给插件。
  插件产生的流发送到浏览器与普通模式中浏览器产生的流传输模式输相反。在浏览器普通模式流传输中,浏览器调用插件并通知它流对象已经创建并且将发送更多的流数据。相反的,在插件产生的流中,插件调用Netscape函数创建流,放入数据,最后释放流。 Plug-in API提供了相应函数给插件用于收发网络中任意一个URL的数据,提供跨文档超链接,使用HTTP发送表单数据到CGI脚本,或用FTP上传文件到远程服务器。 使用 NPN_GetURL请求浏览器加载URL到某个浏览器窗口或框架中显示,或者通过一个新的流对象将该URL的数据发送到插件实例。
  NPN_GetURLNotify函数与NPN_GetURL的操作类似,此外在操作结束时告知插件处理结果信息。
  使用 NPN_PostURL将数据发送到内存或文件中的某个URL。服务器处理的结果可以传送到浏览器窗口或框架中显示,或者通过一个新的流对象传给插件实例。
  NPN_PostURLNotify函数与NPN_PostURL的操作类似,此外在操作结束时告知插件处理结果信息。
  Netscape组中的Plug-in API函数提供了一些插件的基本服务。你可以使用以下NetScape函数: 识别显示插件的浏览器信息:使用 NPN_UserAgent可以读取此信息。
  确定插件和浏览器版本是否兼容,同时可能提供不同版本的替代处理:使用 NPN_Version函数检查主要版本和次要版本的变化。
  相关函数的使用信息参阅:Version, UI, and Status Information 插件可以作为浏览器功能的补充无缝集成在浏览器中。为了使插件看上去是浏览器UI的一部分,插件可以通过提供状态栏消息来模拟浏览器的行为。利用 NPN_Status函数将信息显示到状态栏。
  相关函数的使用信息参阅:Version, UI, and Status Information 支持脚本的插件(scriptable plug-ins)是一种扩展插件,提供了可从JavaScript和DOM通过object和embed元素调用的函数。下面的例子演示了一个媒体播放插件在script元素中通过调用advanceToNextSong()来控制歌曲播放。    var thePlugin = document.getElementById('myPlugin'); if (thePlugin && thePlugin.advanceToNextSong) thePlugin.advanceToNextSong(); else alert("Plugin not installed correctly");  过去使用LiveConnect以及后来的XPConnect来使插件支持脚本。参阅 the Wikipedia article查看历史使用记录。这两种技术已经过时,应该被跨浏览器的npruntime API所取代。
  更多细节内容参阅 Scripting plugins 当你添加了如前所述的扩展代码和附加文件来使插件支持脚本时,插件的构建过程是十分简单的。将插件DLL添加到plugins文件夹,同时将类型库文件和头文件放入application路径的正确位置。下面更详细的讲述实现脚本支持的步骤。 所有主要平台上的构建资源随SDK一起提供。包括Unix平台的makefiles,Windows平台的项目文件和Mac OS X平台的IDEs,definition files, resources files,还有其他用来构建SDK中的示例的资源文件以及你自己的项目文件。Gecko插件可以通过各主要平台上的常用编译器来编译--如何使用这些编译器显然超出了本手册的范围。 所有你需要的资源,包括definition files,source files,resource files,都可以从Plug-in SDK中找到。Plug-in SDK可从mozilla source tree获取或者单独下载可编译的软件包。在mozilla source的modules/plugin/tools/sdk/samples/basic路径下的插件基础例子中包含了在主要平台上构建一个简单插件所需要的所有文件。 暂略 插件不能安装在Firefox目录中。可以将插件打包成扩展并按扩展的方式安装,或者将插件安装到系统标准安装路径。 Windows上插件应该安装在特定插件目录如C:\Program Files\Plugin Name\nppluginname.dll。然后将下面的值添加到注册表。 在Linux和Mac中,插件安装到常规目录下: Linux: /usr/lib/mozilla/plugins or /usr/lib64/mozilla/plugins Mac: /Library/Internet Plug-Ins or ~/Library/Internet Plug-Ins
分享到:
评论

相关推荐

    SAML-tracer:Firefox扩展程序,用于检查SAML消息

    SAML-tracer是Firefox的扩展,旨在使网站之间的SAML-和WS-Federation-Communication的通信调试更加容易。 它是一个请求记录器,除了显示正常请求外,还突出显示和解码所传输的SAML消息。 使用SAML跟踪器 通过在...

    x-plane.org-plugin-manager:用于Forums.x-plane.org上的插件的插件管理器

    X-Plane.org插件管理器从获取加载项。 拥有很多X-Plane插件有时会造成混乱,并且难以管理。 使用此插件管理器,您可以将来自插件... 该附加组件仍在开发中,目前仅在Firefox和Chrome中可用。 请报告任何错误或问题。

    pp-accessibility-web-extension:一个 Firefox 扩展,它告诉用户访问的网站是否适用于各种残障人士

    pp-accessibility-web-extension 现在这是一个实验项目,因为我们正在调查支持我们项目的开发概述 尽管互联网呈指数级发展并变得越来越容易使用,但它仍然存在缺陷。 我们正在解决的具体问题是残障用户可以使用...

    缩放

    该扩展程序现在可以作为Firefox插件使用,可以在位于以下位置的Firefox插件网站上在线找到:( )。 扩展程序的概述视频:( )。 此扩展程序已两次提交给Google Chrome浏览器网上商店,两次被拒绝(2020年5月/ ...

    旅游景点售票系统软件体系结构文档1

    1.1 标识本系统适用于chrome 90.0,firefox 82.0等浏览器使用 1.3 文档概述通过本项目的系统分析,可以深入了解软件系统的开发内容和开发

    Duolingo Boost-crx插件

    基本上,我在Duolingo Web应用程序上缺少一些关键特征,并且缺席让我开发这个插件,即 - 夜间模式, - 条纹通知/提醒, - 打印课程说明, - 写定制课程票据, - 快速课程概述。 还有许多已经实施或在不久的将来实施...

    Badonkatrunc:用于动态文本布局和截断的 jQuery 插件

    #Badonkatrunc ##jQuery 插件用于动态文本布局和截断由 Sticky Brand Play:trade_mark: 的创造者的 Joel Day 开发可在获得演示###概述Badonkatrunc 动态调整大小或截断文本以适应块元素的大小限制。 既可以用作...

    WhaleVault-crx插件

    有关WhaleVault的更详细概述,请访问:https://whaleshares.io/@alexpmorris/whalevault-secure-graphene-cross-chain-key-store-extension有关WhaleVault Firefox官方附加组件的官方信息,请访问:...

    Cetus:用于欺骗作弊引擎的WebAssembly游戏的浏览器扩展

    Cetus是一个用于入侵WebAssembly游戏的浏览器扩展程序(已在Chrome和Firefox上测试)。 Cetus实现了用户熟悉的许多功能 记忆搜寻 点(使用通过二进制检测) 记忆冻结 代码反汇编 代码补丁 Cetus这个名字来自拉丁语...

    appemit:AppEmit是可扩展的轻量级中间件,用于在应用程序(尤其是chrome浏览器)和本地程序之间进行通信,支持Flash Swf。 AppEmit是应用程序(尤其是chrome浏览器)与本地程序之间相互通信的易扩展的轻量级中间件,支持chrome打开rtsp,flash,swf

    主要特点: 在几乎所有浏览器(chrome edge firefox QQ 360 Yandex搜狗歌剧)中播放包含Flash的网页或Flash文件,包括swf交互式动画,flv电影等。 在浏览器中打开和操作本地文件,例如读取PDF,创建,读取,编辑...

    Unakite-crx插件

    请使用其他浏览器(例如Safari或Firefox)或退出以处理您不想被扩展名记录的任务。通过搜索和其他使用的其他使用,存在揭示敏感信息的风险。但是,我们将通过以下方式最小化这一风险:(1)使用安全传输协议和加密...

    JavaScript File API实现文件上传预览

    比如对于 IE,我们需要通过 ActiveX 控件来获取对本地文件的访问能力,而对于 Firefox,同样也要借助插件开发。由于不同浏览器的技术实现不尽相同,为了让程序能够支持多浏览器,我们的程序就会变得十分复杂而难于...

    Browserling(跨浏览器测试)-1.0.2.zip

    概述:跨浏览器测试网站在最流行的浏览器中,如Internet Explorer,Chrome,Firefox,Safari和Opera。免费试用! 描述: Browserling是一款实时交互式跨浏览器测试服务,可为Web开发人员和网页设计人员提供轻松的跨...

    scriptfilter

    一个例子是由 Giorgio Maone 开发的用于 Mozilla Firefox 的。 使用推荐的安全设置时,NoScript 插件会阻止许多安全网站正常运行。 我们的计划是训练一个机器学习模型,通过静态分析内容来对网页进行分类。 该模型...

    muplayer:来自百度音乐的开源网络音频播放器,在不同平台上支持HTML5和Flash引擎。

    MuPlayer是百度团队开发维护的浏览端音频播放内核,它基于HTML5音频及Flash音频技术,实现了多端通用(PC和WebApp),浏览器兼容(即6 +,firefox,chrome,safari等)以及可扩展的多音频格式解码插件的音频文件播放...

    video-downloader:下载HLS视频的助手

    在浏览器中,按F12键激活调试模式,即“开发人员工具”(该快捷方式适用于Chrome和Firefox)并访问“网络”标签 播放视频时,查找其中包含“ index.m3u8”的URL。 所有这些URL都具有m3u8扩展名,因此发现它们应该...

    log4Net详解(共2讲)

    4、详尽演示FireFox中ExtJs的调试及VS2008中javascript的调试方法; 5、了解ExtJs代码的混淆、加密与优化; 6、了解大型实际商业OA项目流程及实战如何使用Ext快速开而简单地开发单页面应用。 注:如果你也在思考...

    大名鼎鼎SWFUpload- Flash+JS 上传

    在FireFox中,如果窗口的滚动条没有回滚到顶部,那么Flash无法加载 Race-conditions when files are cached 兼容ASP.Net Forms SWFUpload v2 延续了SWFUpload的设计目标,将UI分离以交给开发人员控制和后续扩展 ...

Global site tag (gtag.js) - Google Analytics