firefox 自写扩展改版,总结
自己写的扩展,油猴功能,进一步改进,增加了许多操作。原来只是在13以下版本下面能用,主要是在13版本下面chrome代码和page下面代码能够直接互调,13版本以后就不可以了,最近考虑到新版Firefox的功能,进行了这次改进。
1.chrome代码和page代码互调
通过测试,发现function其实是可以调用的,只是chrome下生成的obj在window下面没办法引用其中的属性.
a.通过window postMessage的方式,基于消息的通信修改。初步功能实现,但是后来发现修改代码量太多,并且通信情况比较复杂,要处理相关回调,就想有没其他方法
b.在chrome中通过定义方法,一个代理方法,来提供page调用chrome代码。后来改进了几个版本,现在的样子就成了这样
var usejs = {
require: function (str) {
_action[str] = _action[str] || require(str);
return _action[str];
},
get: function () {
var obj = _shift(arguments);
for (var i=0;i<arguments.length;i++) {
obj = obj[arguments[i]];
}
return obj;
},
get2Str: function () {
return JSON.stringify(usejs.get.apply(usejs,arguments));
},
fnCall: function () {
var obj = _shift(arguments);
var atr = _shift(arguments);
return obj[atr].apply(obj, arguments);
}
} var unsafeWindow = safeWindow.wrappedJSObject;
//注意new unsafeWindow.Object();,这样在page页面中就能遍历下个__usejs对象了
unsafeWindow.__usejs = new unsafeWindow.Object();
for (var key in usejs) {
unsafeWindow.__usejs[key] = usejs[key];
}
2.问题2,调用的nsIXMLHttpRequest,对象进行的http请求在页面中,firebug没办法跟踪了,其实是很正常的现象,因为现在nsIXMLHttpRequest,是chrome级别调用的,的确是找不到了。
调试firebug代码,花费了不少的时间,并且也不能确定通过自己的修改,能不能实现跟踪功能。后来还是通过努力试下了。
实现方式是在发送nsIXMLHttpRequest的时候增加一个hear头,'wgu-outerWindowID':outerWindowID (火狐window唯一标识),
修改了 \content\firebug\lib\http.js,通过request查询win的时候加上了相关的分支
Http.getWindowForRequest = function(request)
{
var loadContext = Http.getRequestLoadContext(request);
try
{
if (loadContext) {
return loadContext.associatedWindow;
}
}
catch (ex)
{
} //下面是新增代码
try {
var outerWindowID = request.getRequestHeader('wgu-outerWindowID');
if (!!outerWindowID) {
var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
var browserEnumerator = wm.getEnumerator("navigator:browser");
while (browserEnumerator.hasMoreElements()) {
var browserWin = browserEnumerator.getNext();
var tabbrowser = browserWin.gBrowser;
var numTabs = tabbrowser.browsers.length;
for (var index = 0; index < numTabs; index++) {
var currentBrowser = tabbrowser.getBrowserAtIndex(index);
var windowUtils = currentBrowser.contentWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
if(windowUtils.outerWindowID==outerWindowID) {
return currentBrowser.contentWindow;
}
}
}
}
} catch (e) { } return null;
};
firefox 自写扩展改版,总结的更多相关文章
- 【转发】NPAPI学习(Firefox和Chrome扩展开发 )
NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...
- Firefox离线安装扩展教程
Firefox离线安装扩展教程 解决问题博文:解决stackoverflow打开慢不能注册登录 应网友求助在上传了需要的扩展资源后,顺便写个离线安装方法,其实百度也行,这不写下来后为需求者省事.(*^ ...
- Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)
我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等.强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Pyt ...
- FireFox 浏览器插件/扩展开发学习
2014-11-08 内容存档在evernote,笔记名"FireFox 浏览器插件/扩展开发学习"
- c#写扩展方法
学习MVC时,学会了写扩展方法,用起来很方便. 01 using System; 02 using System.Collections.Generic; 03 using System.Linq; ...
- CAD在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据
在网页中绘图,并为新绘的对象写扩展数据和读取扩展数据.下面帮助的完整例子,在控件安装目录的 Sample\Ie\iedemo.htm 中. 主要用到函数说明: _DMxDrawX::InsertBlo ...
- CAD在网页绘一个直线,得到直线id,再调该得到直线对象,然写扩展数据
IMxDrawDatabase::ObjectIdToObject 实体id返回实体对象. 参数 说明 [in] LONGLONG lId 实体id JS代码,中绘一个直线,得到直线id,再调该得到直 ...
- firefox 自写底层扩展,源码简介
还记得2010年的时候,那时候开始喜欢上了js,经常逛MDN 一开始写些简单的油猴脚本,慢慢的接触了扩展开发,发现用自己的js知识 加上firefox的插件API,可以完成好多功能. 看了很多插件的源 ...
- Flask的session——关于写扩展所学习到的
这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...
随机推荐
- 第五章SignalR的实时高频通讯
第五章SignalR的实时高频通讯 概述:本例子演示了如果创建一个对象与其他浏览器共享实时状态的应用程序.我们要创建的应用程序为“MoveShape”,该MoveShape页面会显示一个Html Di ...
- CentOS用gparted实现无损调整磁盘分区大小
作者: sheldon 测试服务器硬盘挂载在/usr下的分区大小只有10G,随着必须软件都安装在这个目录下,这个分区已经满额,给分区扩容刻不容缓,window下有PQ分区工具,Linux下也有gpar ...
- SQL中DATEPART返回日期单独部分
定义和用法 DATEPART() 函数用于返回日期/时间的单独部分,比如年.月.日.小时.分钟等等. 语法 DATEPART(datepart,date) date 参数是合法的日期表达式.datep ...
- 接触CrackMe 第一个
今天刚接触这个 做了一个简单的. 用Onlydbg加载之后,对GetDlgItemTextA函数下断点,因为程序是在控件上获取数据的. Register输入Name和Serial点击Ok之后,断点响应 ...
- Git教程--Git安装和版本库的创建
Git的诞生 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大是靠全世界热 ...
- 阿里云的linux命令小结
/** ---------------- [ 华丽分割线 ] ------------------------ ### 121.40.120.167 操作 ### 1.启动 nginx cd /usr ...
- Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理
今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能 上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级.原理和之前的一样,简单吧. <di ...
- 分享个人如何DIY网站的经验
对于一个接触过Web开发的IT人来说,一般都考虑过创建属于自己的网站,可能是定制自己特有风格的博客类网站,可能是私密的个人主页,也可能是展示自己开源工具的网站,当然,酝酿着做个商业网站来创业的人肯定也 ...
- Python成长之路第一篇(4)_if,for,while条件语句
有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...
- mongo设计(三)
原文:http://blog.mongodb.org/post/88473035333/6-rules-of-thumb-for-mongodb-schema-design-part-3 By Wil ...