msstbc
小狐狸
小狐狸
  • UID23152
  • 注册日期2008-03-07
  • 最后登录2010-04-22
  • 发帖数17
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:10358回复:10

扩展中的JS,怎样定时关闭标签页?

楼主#
更多 发布于:2008-03-10 11:37
首先感慨的是扩展开发的资料实在是不好找,特别是中文的,郁闷。

俺想实现个功能,让浏览器自动关闭打开时间超过30分钟的标签页,这个该怎么实现呢?
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
1楼#
发布于:2008-03-10 11:37
1.放一个标签页load监听, 监听一个标签页的存在。
2.放一个setTimeout到监听器的功能里,时间自己算好了。
3.到点的时候做一些可能必要de检测, 目标是关闭标签页。
msstbc
小狐狸
小狐狸
  • UID23152
  • 注册日期2008-03-07
  • 最后登录2010-04-22
  • 发帖数17
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2008-03-10 11:37
非常感谢楼上!

装载完毕的事件怎么监听呢?我按照搜索到的扩展的写法,怎么都监听不到啊,

我是这样写的:

var obj={
        init: function(){
        ......
        }
}

document.addEventListener("load",function(event) {obj.init(); }, false );

DOMContentLoaded倒是可以监听到,不过不能使用,那我究竟错在了哪里?
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
3楼#
发布于:2008-03-10 11:37
msstbc:非常感谢楼上!

装载完毕的事件怎么监听呢?我按照搜索到的扩展的写法,怎么都监听不到啊,

我是这样写的:

var obj={
        init: function(){
        ......
        }
}

document.addEventListener("load",function(event) {obj.init(); }, false );

DOMContentLoaded倒是可以监听到,不过不能使用,那我究竟错在了哪里?
回到原帖


我对XUL下的东西所知有限, 但使用DOMContentLoaded监听是对的。 因为load监听到的东西更广, 比如images加载也会触发load监听。

不知道你是在什么东西下写的测试脚本, 我在firefox2, userchrome.js下测试了下面的代码, 工作正常: 打开firefox窗口3秒后,自动关闭。  看来打开firefox窗口也会触发DOMContentLoaded,  所以你要在关闭一个窗口之前做更多的判断,以确定那确实是一个标签页。
(function()
{
	function init()
	{
		setTimeout(function()
		{
			close();
		},3000);
	}	
	addEventListener("DOMContentLoaded",init,false);
})();
msstbc
小狐狸
小狐狸
  • UID23152
  • 注册日期2008-03-07
  • 最后登录2010-04-22
  • 发帖数17
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2008-03-10 11:37
甚感谢版主。

又发现了个问题,
addEventListener("DOMContentLoaded",init,false);
之后,怎么卸载监听呢?
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
5楼#
发布于:2008-03-10 11:37
removeEventListener("DOMContentLoaded",init,false);

如果一个监听需要被卸载,就不能使用匿名功能。如:
addEventListener("DOMContentLoaded",function(){},false);
removeEventListener("DOMContentLoaded",function(){},false);
这是行不通的。
msstbc
小狐狸
小狐狸
  • UID23152
  • 注册日期2008-03-07
  • 最后登录2010-04-22
  • 发帖数17
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
6楼#
发布于:2008-03-10 11:37
非常感谢这个版块版主的热心帮助,非常感激。

实在不好意思,又遇到问题了

我想了下,实现原理可以是这样,每一个标签页在打开后都可以被监听到,那么在JS中只要设置30分钟后关闭自己这个标签页就可以了。

但问题就是,怎么判断并关闭自己所在的标签页呢?还得再烦请版主指点一下
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
7楼#
发布于:2008-03-10 11:37
msstbc:非常感谢这个版块版主的热心帮助,非常感激。

实在不好意思,又遇到问题了

我想了下,实现原理可以是这样,每一个标签页在打开后都可以被监听到,那么在JS中只要设置30分钟后关闭自己这个标签页就可以了。

但问题就是,怎么判断并关闭自己所在的标签页呢?还得再烦请版主指点一下
回到原帖


首先,我应该不是版主吧?
其次,我的方法也不一定对, 大家在这里切磋一下, 互相学习才是。
再次,我又有了新的方法。这个方法比较精确,即使没有加载页面也会关闭标签,并且没有误触发情况。
(function()
{
	function init(e)
	{
           setTimeout(function()
          {
            gBrowser.removeTab(e.target);
          },3000);
	}
gBrowser.tabContainer.addEventListener("TabOpen", init, false);
})();
msstbc
小狐狸
小狐狸
  • UID23152
  • 注册日期2008-03-07
  • 最后登录2010-04-22
  • 发帖数17
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
8楼#
发布于:2008-03-10 11:37
回楼上高手

您提供的方法我试了,我这里测试好像每次关闭的都是当前在活动的标签,不知何故。

我用的是FireFox 3b4
wushi777
非常火狐
非常火狐
  • UID12365
  • 注册日期2006-04-17
  • 最后登录2011-04-13
  • 发帖数817
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
9楼#
发布于:2008-03-10 11:37
我也不知道为什么, 所以又想了一种办法。
(function()
{
	 function init(e)
	 {
		 setTimeout(function()
		 {
           e.target.parentNode.removeChild(e.target);
		 }
		 ,5000);
	 }
	 
  gBrowser.tabContainer.addEventListener("TabOpen", init, true);     
}());
msstbc
小狐狸
小狐狸
  • UID23152
  • 注册日期2008-03-07
  • 最后登录2010-04-22
  • 发帖数17
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
10楼#
发布于:2008-03-10 11:37
谢谢,我找到了一个别人关i闭所有标签页的代码,问题已经解决了。

CloseAll = {

1: function () {
  var tabs = gBrowser.mTabContainer.childNodes;
  for (var i = tabs.length-1; i >= 0; i--) {

gBrowser.removeTab(tabs);

}
  },

}
游客

返回顶部