自己写的扩展,油猴功能,进一步改进,增加了许多操作。原来只是在13以下版本下面能用,主要是在13版本下面chrome代码和page下面代码能够直接互调,13版本以后就不可以了,最近考虑到新版Firefox的功能,进行了这次改进。

1.chrome代码和page代码互调

通过测试,发现function其实是可以调用的,只是chrome下生成的obj在window下面没办法引用其中的属性.

a.通过window postMessage的方式,基于消息的通信修改。初步功能实现,但是后来发现修改代码量太多,并且通信情况比较复杂,要处理相关回调,就想有没其他方法

b.在chrome中通过定义方法,一个代理方法,来提供page调用chrome代码。后来改进了几个版本,现在的样子就成了这样

  1. var usejs = {
  2.   require: function (str) {
  3.     _action[str] = _action[str] || require(str);
  4.     return _action[str];
  5.   },
  6. get: function () {
  7. var obj = _shift(arguments);
  8. for (var i=0;i<arguments.length;i++) {
  9. obj = obj[arguments[i]];
  10. }
  11. return obj;
  12. },
  13. get2Str: function () {
  14. return JSON.stringify(usejs.get.apply(usejs,arguments));
  15. },
  16. fnCall: function () {
  17. var obj = _shift(arguments);
  18. var atr = _shift(arguments);
  19. return obj[atr].apply(obj, arguments);
  20. }
  21. }
  22.  
  23. var unsafeWindow = safeWindow.wrappedJSObject;
  24. //注意new unsafeWindow.Object();,这样在page页面中就能遍历下个__usejs对象了
  25. unsafeWindow.__usejs = new unsafeWindow.Object();
  26. for (var key in usejs) {
  27. unsafeWindow.__usejs[key] = usejs[key];
  28. }

2.问题2,调用的nsIXMLHttpRequest,对象进行的http请求在页面中,firebug没办法跟踪了,其实是很正常的现象,因为现在nsIXMLHttpRequest,是chrome级别调用的,的确是找不到了。

调试firebug代码,花费了不少的时间,并且也不能确定通过自己的修改,能不能实现跟踪功能。后来还是通过努力试下了。

实现方式是在发送nsIXMLHttpRequest的时候增加一个hear头,'wgu-outerWindowID':outerWindowID (火狐window唯一标识),

修改了 \content\firebug\lib\http.js,通过request查询win的时候加上了相关的分支

  1. Http.getWindowForRequest = function(request)
  2. {
  3. var loadContext = Http.getRequestLoadContext(request);
  4. try
  5. {
  6. if (loadContext) {
  7. return loadContext.associatedWindow;
  8. }
  9. }
  10. catch (ex)
  11. {
  12. }
  13.  
  14. //下面是新增代码
  15. try {
  16. var outerWindowID = request.getRequestHeader('wgu-outerWindowID');
  17. if (!!outerWindowID) {
  18. var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
  19. var browserEnumerator = wm.getEnumerator("navigator:browser");
  20. while (browserEnumerator.hasMoreElements()) {
  21. var browserWin = browserEnumerator.getNext();
  22. var tabbrowser = browserWin.gBrowser;
  23. var numTabs = tabbrowser.browsers.length;
  24. for (var index = 0; index < numTabs; index++) {
  25. var currentBrowser = tabbrowser.getBrowserAtIndex(index);
  26. var windowUtils = currentBrowser.contentWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
  27. if(windowUtils.outerWindowID==outerWindowID) {
  28. return currentBrowser.contentWindow;
  29. }
  30. }
  31. }
  32. }
  33. } catch (e) { }
  34.  
  35. return null;
  36. };

firefox 自写扩展改版,总结的更多相关文章

  1. 【转发】NPAPI学习(Firefox和Chrome扩展开发 )

    NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...

  2. Firefox离线安装扩展教程

    Firefox离线安装扩展教程 解决问题博文:解决stackoverflow打开慢不能注册登录 应网友求助在上传了需要的扩展资源后,顺便写个离线安装方法,其实百度也行,这不写下来后为需求者省事.(*^ ...

  3. Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)

    我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等.强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Pyt ...

  4. FireFox 浏览器插件/扩展开发学习

    2014-11-08 内容存档在evernote,笔记名"FireFox 浏览器插件/扩展开发学习"

  5. c#写扩展方法

    学习MVC时,学会了写扩展方法,用起来很方便. 01 using System; 02 using System.Collections.Generic; 03 using System.Linq; ...

  6. CAD在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据

    在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据.下面帮助的完整例子,在控件安装目录的 Sample\Ie\iedemo.htm 中. 主要用到函数说明: _DMxDrawX::InsertBlo ...

  7. CAD在网页绘一个直线,得到直线id,再调该得到直线对象,然写扩展数据

    IMxDrawDatabase::ObjectIdToObject 实体id返回实体对象. 参数 说明 [in] LONGLONG lId 实体id JS代码,中绘一个直线,得到直线id,再调该得到直 ...

  8. firefox 自写底层扩展,源码简介

    还记得2010年的时候,那时候开始喜欢上了js,经常逛MDN 一开始写些简单的油猴脚本,慢慢的接触了扩展开发,发现用自己的js知识 加上firefox的插件API,可以完成好多功能. 看了很多插件的源 ...

  9. Flask的session——关于写扩展所学习到的

    这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...

随机推荐

  1. 查看和清除本机DNS缓存记录

    Windows上查看和清除本机DNS缓存记录: ipconfig /displaydns  查看ipconfig /flushdns  清除 貌似Time To Live的单位是秒.

  2. UVA 11925 - Generating Permutations

    题意: 给出一个1到n的排列,给出操作顺序,使升序排列能变为所给排列. 分析: 正常冒泡排序的想法.如果前两个数,前面的大于后面的,则换(特例是n,1不能换).否则,就用2的逆操作,把最后的数放前面. ...

  3. UVa 10562 Undraw the Trees

    题意: 将树的关系用字符串的形式给出 分析: 直接dfs搜索,第i行第j个如果是字母,判断i+1行j个是不是'|'是的话在第i+2行找第一个'-',找到后在第i+3行找字母,重复进行. 代码: #in ...

  4. Android开发环境的搭建之(五)DDMS的测试

    启动DDMS(Dalvik Debug Monitor Service) 测试Voice通话功能 左图Device选择MyPhone[Emulator- 5554],右图选择Emulator Cont ...

  5. C#.net 摄像头驱动程序,用avicap32.dll

    装了摄像头后一般会有 avicap32.dll文件,没有一样可以用这些代码. 不需要在解决方案里面引用这个.dll文件. 下面有二种写法的例子: 例一: using System;using Syst ...

  6. 关于jQuery中的ajax的方法介绍

           jQuery提供一系列Ajax函数方便我们调用Ajax, 其中最核心也是最复杂的是jQuery.ajax(),所有的其他Ajax函数都是它的一个简化调用.当我们想要完全控制Ajax时可以 ...

  7. 安装程序时出现错误代码0x80070422

    通过win10应用商店,下载应用,安装时出现错误代码0x80070422. 需要打开services.msc,将windows update服务打开.

  8. 打造坚固的安全的Linux服务器(ssh登录篇)

      Nov 3 01:22:06 server sshd[11879]: Failed password for root from 123.127.5.131 port 38917 ssh2Nov ...

  9. PBOC2.0安全系列之—脱机认证之静态数据认证(SDA)

    一,什么是PBOC2.0 2005年3月13日,人民银行发布第55号文,正式颁发了<中国金融集成电路(IC)卡规范>(简称PBOC2.0).该规范补充完善电子钱包/存折应用:增加借/贷记应 ...

  10. perl 继承写法

    use base (Critter); 和 BEGIN{ require Critter; @ISA=qw/Critter/; } 这两种写法是等价