読み込んでいます...

很早以前我写过一篇文章关于如何在Firefox开发修改当前页面的内容,但是那篇文章的适用场景在于修改当前页面的Tab下的内容,也就是说,如果你打开多个Tab,同时刷新,只有当前的HTML会被改变,好在那篇文章是讲解如何使用鼠标选择相应的范围更改相应的HTML,如果在那个需求下,则现在的这个就不适用了。

我现在就说说如何在Firefox里面修改多个Tab的页面内容吧。

首先在加载Firefox插件的时候,我们可以给每个Tab的对象加上DomContentLoaded事件响应,并且给真正响应的部分添加事件。

//在onload方法写入下面的事件

gBrowser.addEventListener(DOMContentLoaded,function(event)

{

//Firefox下面的appcontent

var appcontent = document.getElementById(appcontent);

//获得之后就可以为真正的响应部分添加事件

if(appcontent)

{

appcontent.addEventListener(DOMContentLoaded, function(event){pageLoad(event);}, true);

}

} , false);

在获得响应的响应事件之后,我们就需要在pageLoad方法中获取相应的Tab的document对象。这里值得一提的是,在Firefox的document对象中,默认是拿的XUL的document,而不是frame的document。虽然我们可以通过window.content.document或者content.document拿到对象,但是这个地方拿到的仅仅是当前窗口,也就是当前Tab的,如果我们要在所有的Tab加载完毕之后自动的更改内容,就需要拿到每一个document。

我们可以更改pageLoad代码如下。

function pageLoad(event)

{

var doc = event.originalTarget;

if(doc.nodeName != #document || !doc.location)

{

return;

}

//doc is document object

//doc.getElementById(“someid”)

//doc.appendChild(someChild)

}

通过上面的代码我们就拿到了每一个Tab的document对象,拿到之后,我们就可以在相应的方法中使用相应的document更改对应的Tab里的HTML了。

380路过 3评论 Firefox Addon 阅读全文..
  1. 置顶的更新,文章汇总 : GuoJing's Blog | 用心对待每一行代码 @

    [...] Firefox Add-on – 同时修改多个Tab的页面内容 [...]

  2. Jim Huang @

    在网上搜firefox tab竟然到了你的BLog :) 加我得链接 http://blog.sina.com.cn/mobilejim
    有两个问题,
    1)
    function pageLoad(event)
    {
    // 这里必须remove掉Event Handler, 否则TabLoaded会被调用很多次。
    }
    2) 在调用TabLoaded之前, 必须区分是Trigged by Tab 还是Trigged By Iframe, 否则一个页面里的Iframe loaded也会调用 Tabloaded。

  3. 诡异的西红柿 @

    @Jim Huang
    呵呵,好,链接加上了,里面具体的实现细节我没有加上,可能也是有一点问题。谢谢指正。

    最近太忙,以后有空多交流。

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »