読み込んでいます...
2009年07月1日

在Firefox里面我们经常要对浏览器进行操作,比如说打开一个Tab或者关闭一个Tab,打开Tab也分两种,一种是在新窗口中打开,而另一种是在当前窗口打开。Tab是很多浏览器新的功能,当然这个新是相对的,因为在2-3年前,Tab还是没有的,主要还是通过IE6进行划分,姑且可以看IE6是解放前,而后面的一些版本可以看做是解放后。

在很多情况下,我们都需要响应自己的一些操作,而这些操作往往是伴随着打开网站的,比如在安装的时候提示用户是否安装成功,在卸载的时候提示用户卸载信息,在点击相应的按钮的时候提示用户相应的信息并打开网站,这些都需要用到Tab。其实Tab一点也不难,这里归纳一下一些Tab的基本操作。

当我们打开一个Tab的时候,最简单的方法是可以编写如下代码,这些代码可以直接写在代码中,不要管它什么错误提示。

// gBrowser是FF的浏览器对象
//
使用addTab方法创建一个Tab
gBrowser.addTab(url);
getBrowser().addTab(url);

通过上面的代码,我们可以打开一个新的tab。但是这个tab并没有被我们所选中,这个时候我们就需要对gBrowser对象的选中属性进行设置,代码也不难。

// 不同版本可能效果不同,也许可以直接打开
gBrowser.addTab("http://www.jguoer.com/");

// 这个是任何版本都可以使用的
gBrowser.selectedTab = gBrowser.addTab("http://www.jguoer.com/");

在有些时候,我们打开一个新的tab的时候还需要对其中的dom进行操作,这个时候就需要等待新的tab里面的document对象执行完毕,否则可能会出现错误,代码可以编写如下。

// 页面还没有完全载入完成,所以可能出现错误
var newTabBrowser = gBrowser.getBrowserForTab(gBrowser.addTab("http://www.jguoer.com/"));
alert(newTabBrowser.contentDocument.body.innerHTML);

// 这个就要更好一些了
var newTabBrowser = gBrowser.getBrowserForTab(gBrowser.addTab("http://www.jguoer.com/"));
newTabBrowser.addEventListener(
"load",
function() { newTabBrowser.contentDocument.body.innerHTML = "<div>hello world</div>"; }, true);

上面的几种方法都是打开了新的窗口,然后激活新的窗口,但是有时候我们需要在当前tab更改url怎么办呢,这里gBrowser就没有作用了,我们必须要使用openUILink方法打开url到当前的tab。代码可以编写如下。

var myExtension = {
  test: function(
event) {
    openUILink(
"http://www.jguoer.com", event, false, true);
  }
}

上面的openUILink也可以直接写在代码里,不管IDE是否报错。上面的代码里面有一个event参数,如果我们只是单纯的打开一个页面不管是否有event参数的话,可以直接传递null即可,一样可以达到我们的效果。:)

在打开了tab之后,我们还需要对当前的tab进行关闭操作,关闭操作可以关闭当前的tab,代码不难。

gBrowser.removeCurrentTab();

另外我们还能够把当前的tab进行移动,例如向左移动和向右移动。

//向右移动
gBrowser.mTabContainer.advanceSelectedTab(1, true);
//向左移动
gBrowser.mTabContainer.advanceSelectedTab(-1, true);

所以,我们对tab的操作完全是可以自定义化,比如创建tab,关闭tab,移动tab之类的,都可以很轻松的完成,而且tab还提供了一些其他的方法,比如获取当前的tab的文档,可以写content.document获取当前的tab的document对象,这样就可以省去httprequest等操作了,也就更加方便了。

388路过 5评论 Firefox Addon 阅读全文..
  1. 诡异的西红柿 @

    @Meta
    拜托,我说的IP是IPhone好吧。。
    我还是觉得这个模板好看一些。。

  2. Meta @

    学习了。。这里是我的IP库。。

    PS:你咋又吧模板换回去了?

  3. Jim Huang @

    又google到这里了 :)。顺便说一句, I hate JS。。。。。。。。。。。。。

  4. jaxer @

    我靠。找这篇文章找了好久~~~终于被我找到了

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