Firefox开发
- 官方文档 First extension
- 目录结构
➜ firefox tree
.
└── borderify
└── manifest.json // 必须
directory, filesmanifest.json内容{
"manifest_version": , // 必须
"name": "Borderify", // 必须
"version": "1.0", // 必须
"description": "Adds a red border to all webpages matching mozilla.org.",
"content_scripts": [
{
"matches": ["*://*.mozilla.org/*"], // 匹配url,<all_urls> 匹配所有
"js": ["content-script.js"] // 本地创建一个 content-script.js用来编写js代码实现插件功能
}
] // 加载matches所匹配的url时,会加载所给定的js脚本
}- 使用
WebExtension APIs调用某些API需要声明权限,需要在manifest.json里面使用permission关键字请求跨域权限
这样content script才能很好的使用WebExtension APIs
- 使用
后台脚本
- 在
manifest.json里面添加background关键字 "background": {
"scripts": ["background.js"]
}- ############################
Content Scripts 不能直接使用大部分WebExtension APIs,
但是可以通过信息messaging APIs与扩展后台脚本通信,
这样间接地调用所有的后台脚本能够调用的APIs例子: 监听点击事件,点击后发送地址给后台脚本
- 目录结构
➜ firefox tree
.
└── borderify
├── background.js
├── content-script.js
└── manifest.json
directory, files manifest.json{
"manifest_version": ,
"name": "Borderify",
"version": "1.0",
"description": "My Firefox Plugin Study",
"icons": {
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content-script.js"]
}
],
"permissions": [
"webRequest",
"notifications", // 如果要使用notification api 就必须要加这个
"<all_urls>" // 允许所有的url
],
"background": {
"scripts": ["background.js"]
}
}- content-script.js
window.addEventListener("click", notifyExtension); // 给每个对象绑定click事件
console.log("content-sciprt.js start");
function notifyExtension(e)
{
console.log(e.target.tagName);
if(e.target.tagName != "A") // 判断tagname是否是link标签(a标签)
{
return ;
}
console.log(e.target.href+"sadsd");
broswer.runtime.sendMessage({"url": e.target.href}); // 发送消息到后台
}
console.log("content-sciprt.js end");background.jsconsole.log("background.js start"):
browser.runtime.onMessage.addListener(notify); // 设置消息监听
function notify(message)
{
browser.notifications.create({
"type": "basic",
"title": "you click a link",
"message": message.url + 'sdsd'
});
}
console.log("background.js end");browser.notifications.create文档
- 运行测试
进入about:debugging后添加临时扩展测试
- 运行测试
- 目录结构
Firefox开发的更多相关文章
- Firefox上Web开发工具库一览
Firefox的目标之一就是尽可能地使web开发者的生活更简单高效,并通过提供工具和具有很强扩展性的浏览器使人们创造出神奇的东西.使web开发者使用Firefox的时候,浏览器可以提供大量开发工具和选 ...
- 前端教程&开发模块化/规范化/工程化/优化&工具/调试&值得关注的博客/Git&面试-资源汇总
内容精简 资源这么多,多看看多学习再总结肯定是好的.多读读就算看重了不算浪费时间,毕竟一千个读者就有一千个林黛玉,还有温故而知新,说不定多读一些内容,就发现惊喜了呢.不过,在此也精简一些内容,就1~2 ...
- firefox native extension -- har export trigger
这两天想学习下如何在运行自动化脚本时去capture http traffic,google看到一篇博客介绍用browser mob proxy或者firefox+firebug+netexport, ...
- javascript错误处理与调试(转)
JavaScript 在错误处理调试上一直是它的软肋,如果脚本出错,给出的提示经常也让人摸不着头脑. ECMAScript 第 3 版为了解决这个问题引入了 try...catch 和 throw 语 ...
- 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】
原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...
- Sublime Text 最佳插件列表(转)
Package Control 安装方法 首先通过快捷键 ctrl+` 或者 View > Show Console 打开控制台,然后粘贴相应的 Python 安装代码. Sublime Tex ...
- 推荐!Sublime Text 最佳插件列表
本文由 伯乐在线 - 艾凌风 翻译,黄利民 校稿.英文出处:ipestov.com.欢迎加入翻译组. 本文收录了作者辛苦收集的Sublime Text最佳插件,很全. 最佳的Sublime Text ...
- 深入浅出ES6(六):解构 Destructuring
作者 Jason Orendorff github主页 https://github.com/jorendorff 什么是解构赋值? 解构赋值允许你使用类似数组或对象字面量的语法将数组和对象的属性 ...
- Sublime Text各种插件使用方法
有快捷键冲突的时候可以修改快捷键,建议修改插件快捷键而不是Sublime Text的快捷键,我的有冲突的一律将插件快捷键设置成:Ctrl+Alt+A(B...) Package Control 通俗易 ...
随机推荐
- browserify文件后函数调用报is not defined的原因
举个例子: a.js ; module.exports.a = a; b.js var result = require('./a'); var getA =() => { console.lo ...
- SpringBoot+MyBatis中自动根据@Table注解和@Column注解生成增删改查逻辑
习惯使用jpa操作对象的方式,现在用mybatis有点不习惯. 其实是懒得写SQL,增删改查那么简单的事情你帮我做了呗,mybatis:NO. 没办法,自己搞喽! 这里主要是实现了通过代码自动生成my ...
- 1<=portNo<=4竟然在keil4.71里面不报错
1.if( 1<=portNo<=4 ) { CardIn2_CS_L; //pull low CardIn1_CS_H; CardOut1_CS_H; CardOut2_CS_H ...
- python2.7下使用logging模块记录日志到终端显示乱码问题解决
刚才翻了翻2年以前用python2.7写的一个爬虫程序,主要功能就是把各地市知识产权局/专利局网站的专利相关项目.课题通知,定期爬取和分析,辅助企业进行项目申请. 这里要谈的不是爬虫功能的实现,而是今 ...
- OC中的内省(Introspection)方法
我们在写OC代码的时候经常用到:isKindOfClass: 一类的方法,但是对于它并没有一个了解,这里也是从网上搜索了一些内容,简单介绍并记录一下.这类方法就是属于OC的特性之一:内省. 内省(In ...
- NOIP模拟赛D2T1自己的解题思路
T1题目在此: 数轴上有n个球,每个球直径为1,第 ii 个球的左端点为pi即占据了数轴上[pi,pi+1][pi,pi+1]).在 P位置有一堵墙.有q个操作,每次要么以x位置为左端点放一个新球(如 ...
- JDK1.8降到1.7技巧
前言: 最近部署一个产品,该产品不支持JDK1.8,碰巧我的机器安装的是1.8,这就需要降到1.7才能部署启动成功.那么我也是不赞成卸载1.8来安装1.7,因为很多时候可能需要1.8和1.7来回切换. ...
- php实现姓名按首字母排序的类与方法
php将名字按首字母进行排序 <?php public function getFirstChar($s){ $s0 = mb_substr($s,0,3); //获取名字的姓 $s = ico ...
- 嵌入式C语言自我修养 06:U-boot镜像自拷贝分析:section属性
6.1 GNU C 的扩展关键字:attribute GNU C 增加一个 __atttribute__ 关键字用来声明一个函数.变量或类型的特殊属性.声明这个特殊属性有什么用呢?主要用途就是指导编译 ...
- python教程(四)·序列
距离上次的小项目已经休息了很长一段时间,是时候来继续本系列教程了.这一节开始我们将深入python中的数据结构. 序列的概念 在python中,最基本的数据结构是序列,序列包含一个或多个元素,每个元素 ...