Firefox(火狐)浏览器扩展开发初探

news/2024/11/15 18:13:55/文章来源:https://blog.csdn.net/ugg/article/details/6759571

        最近开发一个FF的扩展,自动完成公司的订餐操作,主要完成的功能很简单:登陆网站,执行一个特定操作,并在ff的状态栏内显示执行的成功或者失败的状态。以前没有写过FF扩展,需要从头学习,在完成这个扩展过程中,有些收获记录下来,一方面自己记录,另一方面也方便有此需求的同学。在整个开发过程中碰到一些问题,也走了一些弯路,希望对其他同学有所帮助。
        由于是第一开发FF扩展,没什么经验,所以,第一步先去搜索些关于FF插件开发的文档。先几乎把所有关于FF插件开发的中文文档看个边,至少了解FF扩展和插件的基本信息,以及插件的基本结构,并在这个过程中在构建自己的开发环境。
        构建自己的开发环境
,构建自己的firefox开发环境,好处是你可以随便在这个开发环境中折腾,出现问题也不会影响你正常firefox的使用,当然使用这场模式也没问题。这一步主要做的事情有
                第一步,firefox启动时,添加-no-remote -P develop 参数,其中develop代表开发者,如果有多个开发者你可以改这个字段就可以。Windows系统修改方法,是右键Firefox图标,属性,在目录里面添加此项即可,如下图
       
                第二步
,为了更好的调试插件,修改Firefox某些项配置,具体方法:firefox的地址栏输入about:config回车,
                        参数:javascript.options.showInConsole= true
                        作用:将chrome文件中的错误显示在Console里。
                        参数:nglayout.debug.disable_xul_cache= true
                        作用:关闭XUL缓存,这允许不重启而改变窗口以及对话的内容。这里,可以使用目录而不是Jar。但是Overlay改变后,overlay文档必须重载(这一项非常有用,修改uxl后不用重启窗口)。
                        参数:browser.dom.window.dump.enabled= true
                        作用:这将允许dump()函数输出到stdout里。参考window.dump函数。特权应用也可用nsIConsoleService。
                        参数:javascript.options.strict= true
                        作用:启用严格JavaScript错误提示,js出错调试可用。
                        参数:extensions.logging.enabled= true
                        作用:这将给出更多关于安装以及更新插件的日志信息。
                        参数:nglayout.debug.disable_xul_fastload= true (仅限Gecko 2.0+ (Firefox 4.0+))
                        参数:dom.report_all_js_exceptions= true
            以上参数有些在你的配置项已经存在,可能设置的状态值不对,修改下即可。有些参数可能没有,需要你手动创建这些参数和值。只需要在list中右键-》新建-》布尔即可。
           了解FF扩展的基本文件结构


        了解ff扩展的基本结构,也对FF扩展相关的文档有所了解。现在最迫切的是想先创建一个自己的扩展,虽然我们现在还是很了解install.rdf,chrome.manifest文件内是什么东东,但是丝毫不妨碍我们创建一个FF的扩展,因为FF已经给我们提供了一个工具,可以生成自己的扩展,作为新手我强烈建议创建一个这样的扩展包,学习FF的扩展目录结构和文件内容。创建ff扩展的链接https://addons.mozilla.org/en-US/developers/tools/builder,访问这个页面,按上面说明每项参数填写即可,和其他网站一样,星号是必填的。填写完成后,点击底部按钮,就会创建你的第一个FF扩展,然后下载下这个zip包,把zip后者,修改成xpi,然后拖到你FF中去,安装,重启,看看你的第一个ff扩展吧,为了看到效果,建议你把这一串属性全都勾选上,这样你可以方便的看到插件所能展现的效果了。

没有写一行代码,第一个FF扩展已经完成了。接下来,我们仔细研究下FF扩展的文件吧
       Install.rdf文件,install.rdf文件是FF扩展的安装文件,在这个文件配置FF扩展相关的信息。
<?xmlversion="1.0" encoding="UTF-8"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Descriptionabout="urn:mozilla:install-manifest">
       <!—扩展的ID,之前的版本都是guid,现在流行方式是个email地址,要确保这个ID在你的电脑上唯一-->
       <em:id>ugg_xchj@hotmail.com </em:id>
       <!—2表示是ff扩展,这个数字不要变-->
       <em:type>2</em:type>
       <!—FF扩展的名字-->
       <em:name>u-mytest-name</em:name>
       <!—FF扩展的版本号-->
       <em:version>1</em:version>
       <!—FF扩展的创建者和贡献者->
       <em:creator>ugg</em:creator>
       <em:contributor>ugg </em:contributor>
       <!—FF扩展的描述->
       <em:description>u-description</em:description>
       <!—FF扩展的关于部分,可以是一个网址,也可以是扩展内的一个窗口个窗口->
       <em:aboutURL>chrome://u-packagename/content/about.xul</em:aboutURL>
       <!—FF扩展的选项部分,可以是一个网址,也可以是扩展内的一个窗口个窗口,选项部分和扩展内defaults\preferences下的文件有关系,可以通过这块设置一些变量的默认值->
       <em:optionsURL>chrome://u-packagename/content/options.xul</em:optionsURL>
       <em:targetApplication>
            <Description>
                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!—Firefox,这个guid不能变,表示的是FF-->
                <em:minVersion>0.3</em:minVersion> <!—最低的支持版本-->
                <em:maxVersion>8.0a1</em:maxVersion> <!—最高的支持版本-->
           </Description>
       </em:targetApplication>
  </Description>
</RDF>

除了这些参数外,install.rdf还有其他的参数,详细的可以从https://developer.mozilla.org/en/install_manifests了解

chrome.manifest文件
      content   u-na                 chrome/content/
      overlay   chrome://browser/content/browser.xul   chrome://u-na/content/ff-overlay.xul
      定义u-na包的content路径,使用插件中的ff-overlay.xul覆盖浏览器中browser.xul。
      Chrome.manifest作用不仅仅如此,还可以定义很多内容,关于这个文件的详细描述可以参考https://developer.mozilla.org/en/chrome_registration

Xul文件
XUL(XML用户界面语言)是Mozilla的基于XML的语言,可以快速构建应用程序的界面。Mozilla的界面元素有很多比如状态栏,工具栏,按钮等等,需要设置xul才能更改或者控制FF的界面,关于xul的详细介绍参考https://developer.mozilla.org/en/xul。我们可以参考下状态栏的xul控制
<statusbarid="status-bar">
                  <statusbarpanelid="dcdingcan"
                   label="登陆中...."  右下角状态栏显示信息
                   context="stockmenu"
                   οnclick="DingCan.disPlay('')"点击后触发事件,这个事件有js控制
         />
</statusbar>

        以上都是最简单的内容,如果要做出花哨需要详细查看MDN文档。有了这些基本知识后,我们回到我之前的需求上。我希望做一个FF扩展,在这个扩展中可以设置登录用户的账号和密码,当打开FF后,按给定的用户名和密码登录公司订餐网站,执行成功或者失败后在状态下给出提示。最终实现,设置域账号密码



打开ff后的状态显示

代码下载,点击此处

实现功能很简单,代码也比较简单,就不做详细介绍了,大概说下我开发过过程碰到的一些问题。

       Q:开发过程中的插件如何在FF中调试?
       A:还记得install.rdf中的<em:id>ugg_xchj@hotmail.com</em:id>字段嘛?在你的电脑C:\Documentsand Settings\用户名\Application Data\Mozilla\Firefox\Profiles\dqfrxoai.default\extensions的目录内创建名字为ugg.xchj@hotmail.com的文件,文件内容为正在开发这个FF扩展的绝对路径,比如D:\m\ffex\myffex\helloword。然后重启FF即可工具-》附件组件管理器中看到你的插件。

       Q:为什么我创建的扩展不能加载到FF中
       A:主要有几方面,1:确保install.rdf,chrome.manifest文件格式正确,最好的办法是直接修改已有的FF扩展包的install.rdf,chrome.manifest文件,一般这两个文件出错,FF在加载扩展过程会中断,不能再加载其他的组件。2:编码问题,一旦你的文件中出现中文,一定要确保采用utf-8格式保存文件,否则会加载失败,扩展不显示,建议所有的文件都采用utf-8格式。

      Q:如果打包xpi文件?
       A:使用winrar或者winzip打包zip,修改成xpi格式即可。注意,要在包含有install.rdf的文件目录打包,否则会提示xpi包已损坏,不能安装,另外压缩方式选择为存储。

      Q:js代码在FF扩展开发有何用处?
      A:FF扩展开发过程中,使用xul开发FF的扩展的界面,而使用js开发扩展的处理逻辑,在我提供的订餐插件中,使用js登陆网站,执行操作。Js处理逻辑很重要,我使用已经写好的js文件,很容易开发出google的扩展插件,IE的扩展插件。所以,浏览器扩展的开发,更多的是js逻辑的开发。
      学习FF扩展,最佳的方式是多看看别人写的FF扩展,下载下别人的扩展,把xpi修改成zip,直接解压看里面的结构,开发就可以,学习过程很快。另外一个好出去是FF的开发社区,多看下MDN文档,比如下面的就是官方创建一个FF扩展的过程。https://developer.mozilla.org/en/Building_an_Extension

参考资料:

开发你的第一个FF插件 http://blog.osqdu.org/develop-your-first-firefox-plugin_129.shtml
Install,manifest文件字段说明 https://developer.mozilla.org/en/install_manifests
创建一个FF插件 https://developer.mozilla.org/en/Building_an_Extension

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42690.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

火狐浏览器开发者工具的一些使用方法

1. 右键点击“查看页面源代码”&#xff0c;可以看到页面的源码 2. 开发者工具的使用 2.1 从页面中选择一个元素&#xff0c; 点击选择的元素&#xff0c;就会定位到该元素的代码上 2.2 显示Web页面代码的结构&#xff0c;当鼠标移到某个元素上面&#xff0c;代码会…

关于火狐开发者工具---个人总结 F12

关于火狐开发者工具---个人总结 火狐浏览器自带开发工具包含一下几个内容&#xff1a; 1.查看器: 包含页面的主体的框架结构&#xff0c;所使用的标签。以及每个具体的标签的使用的css的效果、样式、字体等的效果。主要是可以随时的调整&#xff0c;查看效果。 2.控制台&#x…

听说火狐要换Logo,网友们掀起了一场“战争”

本文转载自程序员的那些事。 企业或产品的LOGO&#xff0c;是一种独有且特异的标志&#xff0c;能够最直观且最形象地体现企业及产品的功能与风貌。如果企业及产品的功能有所变化或升级&#xff0c;LOGO也会顺着这波趋势有所改变&#xff1b;至于时刻都在更新换代的互联网产业…

使用火狐拓展插件以及运行脚本的超详细方法

1.首先我们需要下载火狐浏览器 火狐浏览器官网&#xff1a;火狐浏览器 打开后默认页面&#xff1a; 2.如图所示点击右上角打开菜单&#xff0c;然后点击附加组件&#xff1a; 3.进入该页面后在搜索框输入 &#xff1a; tampermonkey &#xff08;油猴插件&#xff09; 4.接下…

GPT-4爆火,去中心化算力能解决AI算力难题吗?

上周&#xff0c;OpenAI 大型语言模型 GPT-4 一经公布便引发了全球科技圈与媒体的关注&#xff0c;60秒创建出一款小游戏&#xff0c;将一张草图快速变为功能性的网站&#xff0c;完美通过历史、数学等几乎所有的学科考试&#xff0c;检查代码漏洞等等&#xff0c;各种逆天的功…

.NET周报 【5月第3期 2023-05-21】

国内文章 C# 实现 Linux 视频会议&#xff08;源码&#xff0c;支持信创环境&#xff0c;银河麒麟&#xff0c;统信UOS&#xff09; https://www.cnblogs.com/shawshank/p/17390248.html 信创是现阶段国家发展的重要战略之一&#xff0c;面对这一趋势&#xff0c;所有的软件应用…

谁是各领域AI的top1?人工智能领域AI工具排名,各类产品一网打尽(文本AI、图片AI、编程AI、办公AI、视频AI、音频AI,AI导航网站排名)链接简介、使用方法一目了然(持续更新)可玩性极高!

AI&#xff1a;人工智能领域AI工具产品集合分门别类(文本类、图片类、编程类、办公类、视频类、音频类、多模态类)的简介、使用方法(持续更新)之详细攻略 导读&#xff1a;最近&#xff0c;ChatGPT、GPT-4等人工智能技术席卷了互联网&#xff0c;吸引了众多人对AI相关应用的开发…

【论文系列解读】LLM构建通用视觉(SUR-Adapter)声音模型(Tango)

通用视觉&音频模型的思考 0. 视觉(Diff)怎么和多模态结合(0) 总结(1) 关键技术(1-1) LangChain(1-2) **Versatile Diffusion**(1-3) Tango(1-4) SUR-adapter 1. SUR-Adapter(0) 总结(1) 摘要(2) 相关工作(2-1) 文图生成 & LLM(2-2) 语义理解和推理数据集(2-2-1) 数据收…

边缘计算,光的形式

撰稿 | Philip&#xff08;香港中文大学&#xff0c;博士生&#xff09; “嘿&#xff0c;Siri&#xff0c;今天天气怎么样&#xff1f;” 设想这样一个场景&#xff0c;当你早上起床&#xff0c;向你的智能手机发起这样一个语音指令&#xff0c;从用户命令到结果可能有大约0.2…

文心一言 VS chatgpt (8)-- 算法导论2.3 5~6题

五、回顾查找问题(参见练习 2.1-3)&#xff0c;注意到&#xff0c;如果序列 A 已排好序&#xff0c;就可以将该序列的中点与v进行比较。根据比较的结果&#xff0c;原序列中有一半就可以不用再做进一步的考虑了。二分查找算法重复这个过程&#xff0c;每次都将序列剩余部分的规…

考研复试50条,上岸第一条!

“上岸第一条” 众所周知&#xff0c;初试和复试在整个考研过程中占比都很高&#xff0c;初试不满意&#xff0c;复试需努力&#xff01;如果你想通过考研复试&#xff0c;顺利上岸&#xff0c;这50条必须知道。 1.分数线出来应该做什么&#xff1f; (1)高分能够上目标专业&…

XSCTF联合招新【Simple-Math】(MSIC+Crypto)

文章目录 XSCTF联合招新【Simple-Math】&#xff08;MSICCrypto&#xff09;step1 打开题目文件step2 求解过程 XSCTF联合招新【Simple-Math】&#xff08;MSICCrypto&#xff09; step1 打开题目文件 step2 求解过程 给了我们一个线性方程组&#xff0c;然后让我们求解&…

挑战Man Group!顶级对冲基金的10道Python面试题

量化投资与机器学习编辑部 如果你正在面试一家对冲基金公司&#xff0c;你可能需要看看我们今天为大家提供的题目。 Man Group量化团队近期出了10道Python编程题&#xff0c;来考考大家的基本功究竟怎么样。 请不要借助计算机 不要偷看答案 看看自己的真实水平到底如何 假如面…

浙工大MBA提面通过顺利上岸经验分享

浙江工业大学2022级上岸学长前来分享一些经验。我当时参加了浙工大2021年4月份的第二批提前批面试&#xff0c;第一批次没赶上&#xff0c;不过也正好也多了一些时间更好的去进行材料的准备以及修改完善&#xff0c;好在最后提面和笔试双双通过。因为工大MBA项目自两年前开始取…

开源情报分析(OSINT)CTF社工类2万字题详细教程,请不要利用本文章做不道德的事,后果概不负责

简介 现在国内外最新的ctf比赛都有这个项目了&#xff0c;列如给你一个照片找地址或者人名&#xff0c;给你一个名字找他的社交账号什么的&#xff0c;考验选手的信息收集与社工能力&#xff0c;这篇文章对这类题型做一个基础的总结&#xff0c;以后遇到这种题型就知道该怎么做…

浙大英文MBA项目适合哪些人报考?达立易考解析

关于浙大MBA项目的结构划分&#xff0c;我们都知道有中文和英文两类&#xff0c;对于中文项目的各方向选择问题达立易考教育做了比较系统的分析&#xff0c;而英文项目中的全日制MBA项目我们也在浙江在职读研微信公众号上专门做过报考难易度和适应群体分析&#xff0c;本文专门…

20年福州大学计算机录取名单,万满意20年福州大学法硕报考——连续3年录取名单分数线数据分析...

在CWTS世界大学排行榜中&#xff0c;有一所学校曾力压清华、北大&#xff0c;跃居中国内地大学第一&#xff0c;这所学校既非复旦、浙大等985名校&#xff0c;也不在世界一流大学建设名单之列&#xff0c;而是位居东南一隅&#xff0c;以低调著称的福州大学。 在教育部第四轮学…

考研经历贴(2023)

公共课经验&#xff08;数一英一&#xff09; 前言 博主从1月份准备考研到9月份&#xff0c;最后由于一些运气因素意外保研&#xff0c;没有经历考研最核心的阶段&#xff0c;但是里面的经验可以使大家少走一些弯路&#xff0c;也希望大家辩证的参考。 高数备考 基础&#…

DASCTF NOV X联合出题人2022年度积分榜争夺赛!Crypto Wp

CRYPTO easy_hash 根据 e n c o d e ( ) encode() encode()函数&#xff0c;已知 a 1 a_1 a1​&#xff0c;可以求出 a 2 , a 3 a_2,a_3 a2​,a3​&#xff1b;已知 s e c r e t 1 secret_1 secret1​&#xff0c;可以求出 a 0 a_0 a0​&#xff1b; 根据 m y h a s h ( ) m…

最近很火的Chat Gpt到底是什么?为什么会这么火呢?我们怎么去使用Chat Gpt呢?

带着以上三个问题&#xff0c;下面进行回答&#xff1a; 1、Chat Gpt到底是什么&#xff1f; Chat GPT是一种基于GPT模型&#xff08;Generative Pre-training Transformer&#xff09;的聊天机器人技术&#xff0c;它可以通过学习大量真实对话数据&#xff0c;自动生成自然的…