`

火狐扩展开发:普通Web页面和浏览器扩展互相通信

阅读更多

前篇博客介绍 浏览器扩展在第三方页面引入JS脚本 的方法,但是插入在第三方页面里面的JS代码是无法调用浏览器扩展的API(如:XPCOM Interface Reference),这样这些插入到第三方页面的代码就没办法和浏览器扩展进行通信,没办法交换数据,我们完全控制不了它们了。

 

对于这个问题Mozilla提供了一个方法:用DOM元素的属性来交互数据,这个方法非常妙;浏览器扩展可以获得第三方页面中任何DOM元素的属性,而这个页面的JS代码(就是我们插入的远程JS代码)显然也可以。

(官方文档地址:Interaction between privileged and non-privileged pages

 

官方的文档写的比较罗嗦(我试着翻译了一半没完成),而我自己开发扩展只需要用到少量而且简单的数据的交换,所以我写一个转述。

 

 

页面向浏览器扩展发送数据 

在页面HTML中创建一个DOM和自定义事件,代码如下:

var element = document.createElement("MyExtensionDataElement");
element.setAttribute("data-count", "foobar");
document.documentElement.appendChild(element);

var evt = document.createEvent("Events");
evt.initEvent("MyExtensionEvent", true, false);
element.dispatchEvent(evt);//触发事件

 

在扩展的browser.xul里面监听上面创建的自定义事件,代码如下:

var MyExtension = {
    myListener: function(evt) {
        var count = evt.target.getAttribute("data-adcount");//这就是取到的数据
        //alert(count);
    }
}

document.addEventListener("MyExtensionEvent", function(e) { myExtension.myListener(e); }, false, true);
// 最后一个值是火狐扩展的特权值,表示允许监听到普通页面的事件。

 

 

 浏览器扩展向页面发送数据

在浏览器扩展的browser.xul中给页面创建一个自定义事件,触发事件可以改变页面中相应DOM元素的属性值,代码如下:

var myExtension = {
  myListener: function(evt) {
    var count = evt.target.getAttribute("data-adcount");//这就是取到的数据
    //alert(count);

/* the extension answers the page*/
    evt.target.setAttribute("attribute3", "The extension");
   
    var doc = evt.target.ownerDocument;//取得页面的文档
   
    var AnswerEvt = doc.createElement("MyExtensionAnswer");
    AnswerEvt.setAttribute("Part1", "answers this.");

    doc.documentElement.appendChild(AnswerEvt);

    var event = doc.createEvent("HTMLEvents");
    event.initEvent("MyAnswerEvent", true, false);
    AnswerEvt.dispatchEvent(event);
  }
}

document.addEventListener("MyExtensionEvent", function(e) { myExtension.myListener(e); }, false, true);

 

在页面中我们只要获取刚才设置的DOM元素的属性值就可以得到扩展内部发过来的数据了。

 

分享到:
评论

相关推荐

    firefox插件开发,firefox plugin 开发 firefox 扩展 开发

    总的来说,Firefox插件开发涉及前端技术、浏览器API的使用、调试技巧以及项目管理等多个方面,通过不断学习和实践,可以创建出功能强大的个性化浏览器扩展。在开发过程中,了解并熟练掌握Firefox的开发环境配置、...

    基于 Mozilla firefox 的扩展开发

    2. **WebExtensions**:一种通用的跨浏览器扩展开发框架,使得 Firefox、Chrome 和 Safari 等浏览器的扩展可以共享大部分代码。 3. **Addon SDK**:虽然不再推荐使用,但对于初学者来说,其提供了更简单的 API 和...

    firefox扩展插件制作小综合

    1. **Firefox扩展(Add-ons)**:Firefox扩展是定制浏览器功能和界面的工具,它们可以改变网页的显示方式,增加新的功能,或者优化浏览体验。开发者通过编写符合特定规范的代码来创建这些扩展,让Firefox用户能够...

    Firefox(火狐)浏览器 插件开发 DEMO VC6

    标题中的“Firefox(火狐)浏览器 插件开发 DEMO VC6”指的是使用Visual C++ 6.0(简称VC6)开发Firefox浏览器插件的一个示例项目。这个项目可能是为了帮助开发者理解如何在Firefox中创建自定义功能,增强浏览器的使用...

    浏览器扩展开发测试例子

    Chrome扩展通常发布在Chrome Web Store,而Firefox扩展则在Mozilla Add-ons Marketplace。 总的来说,"浏览器扩展开发测试例子"涵盖了从创建基本的manifest文件到编写功能代码,再到调试和发布的一系列过程。学习这...

    Firefox和Chrome的扩展程序可以为任何网址添加评论

    这里主要涉及的是两种主流浏览器——Firefox(火狐)和Chrome(谷歌浏览器),以及它们支持的Web扩展机制,允许开发者创建自定义功能,如在网页上添加评论功能。这种扩展通常通过JavaScript实现,因为JavaScript是...

    JAVA制作火狐内核浏览器源代码

    XUL是一种XML标记语言,常用于Firefox扩展和自定义应用程序的用户界面设计。 4. **JavaFX**:考虑到文件名包含"javafox.zip",很可能项目使用了JavaFX来创建图形用户界面。JavaFX是Java的一个模块,用于构建桌面、...

    Web浏览器源代码

    "Web浏览器源代码"的项目通常是一个学习和实践的好机会,可以帮助开发者深入了解浏览器的工作原理,并提升其在Web开发领域的专业技能。通过阅读和分析"MyBrowser"这个压缩包中的代码,你可以更直观地看到这些概念是...

    Firefox Extension example

    总之,Firefox扩展开发是一个结合了前端技术和浏览器API的领域,通过学习和实践,你可以创建出个性化的浏览器工具,提升你的网络浏览体验。记得持续关注社区更新,因为WebExtensions API会随着浏览器版本的升级而...

    webBrowser扩展浏览器通过JS代码与串口通讯.rar

    首先,"webBrowser扩展浏览器"是指那些可以支持更多定制和扩展功能的浏览器,比如Chrome的扩展程序或Firefox的插件。这些扩展通常可以访问浏览器的一些底层功能,从而提供了超越标准Web页面的交互能力。 **JS与串口...

    Firefox 52.0.2 渗透便携版

    1. **Burp Suite Extension**:Burp Suite是渗透测试中的旗舰工具,其Firefox扩展可以方便地集成到浏览器中,用于拦截、修改和分析网络流量,帮助测试者发现应用层的漏洞。 2. **WebScarab**:WebScarab是一个开源...

    火狐扩展插件HelloWorld项目

    5. **WebExtensions**:自Firefox 48起,火狐开始全面支持WebExtensions,这是一种与Chrome、Edge等现代浏览器兼容的扩展开发框架。WebExtensions使用标准的Web技术(如JavaScript和HTML),提高了跨浏览器的兼容性...

    浏览器扩展源码

    本资源包含的是浏览器扩展的源码,通过分析和学习这些源码,你可以深入了解浏览器扩展的工作原理并进行自定义开发。 首先,我们要理解浏览器扩展的基本结构。一个完整的浏览器扩展通常包括以下几个部分: 1. **...

    火狐firefox26

    火狐Firefox是一款由Mozilla公司开发的开源网络浏览器,以其强大的安全性、可定制性和开放源代码的特点深受用户喜爱。Firefox 26是该系列的一个重要版本,它在功能和性能上都有显著提升,特别是在安全性和用户体验...

    Firefox NPAPI插件开发实例

    《Firefox NPAPI插件开发实例》 NPAPI(Netscape Plugin Application Programming Interface)是一种用于在Web浏览器中实现跨平台的插件技术,它允许浏览器加载外部代码来增强功能,如播放多媒体、运行Java applet...

    C#开发的浏览器

    虽然.NET框架没有内置的渲染引擎,但可以利用开源项目如WebKit.NET或GeckoFX,它们分别基于WebKit和Firefox的Gecko内核,将Web内容转化为可视化表示。 5. **用户界面**:C#提供了多种方式来构建用户界面,如WPF或...

    WEB浏览器支持库

    标题中的“WEB浏览器支持库”指的是用于开发和增强WEB浏览器功能的软件库。这些库通常包含了一系列预编译的代码和API(应用程序接口),开发者可以借助它们来实现更复杂的网页交互、性能优化或者兼容性调整。在Web...

    Firefox火狐浏览器官方Setup 44.0.2-win64版本exe安装包

    Firefox,这款由Mozilla基金会开发的开源网络浏览器,以其强大的安全性能、高度的可定制性和丰富的扩展插件闻名于世。在本文中,我们将聚焦于44.0.2-win64版本的Firefox安装包,探讨其特性、安装过程以及如何充分...

    Firefox 新浪分享工具条扩展

    关于“Firefox”:Firefox是一款由Mozilla开发的开源网络浏览器,以其强大的定制性和安全性而受到用户的喜爱。它支持多种扩展,允许用户根据个人需求自定义浏览器功能,如增强隐私保护、提高效率、添加特殊功能等。 ...

    natgeo-firefox-extension:当天国家地理图片firefox扩展

    【标题】"natgeo-firefox-extension:当天国家地理图片Firefox扩展"所涉及的知识点主要集中在浏览器扩展开发领域,特别是针对Mozilla Firefox浏览器的扩展开发。这是一个专门为Firefox设计的插件,其核心功能是展示...

Global site tag (gtag.js) - Google Analytics