阅读:10793回复:10
扩展中的JS,怎样定时关闭标签页?
首先感慨的是扩展开发的资料实在是不好找,特别是中文的,郁闷。
俺想实现个功能,让浏览器自动关闭打开时间超过30分钟的标签页,这个该怎么实现呢? |
|
1楼#
发布于:2008-03-10 11:37
1.放一个标签页load监听, 监听一个标签页的存在。
2.放一个setTimeout到监听器的功能里,时间自己算好了。 3.到点的时候做一些可能必要de检测, 目标是关闭标签页。 |
|
2楼#
发布于:2008-03-10 11:37
非常感谢楼上!
装载完毕的事件怎么监听呢?我按照搜索到的扩展的写法,怎么都监听不到啊, 我是这样写的: var obj={ init: function(){ ...... } } document.addEventListener("load",function(event) {obj.init(); }, false ); DOMContentLoaded倒是可以监听到,不过不能使用,那我究竟错在了哪里? |
|
3楼#
发布于:2008-03-10 11:37
msstbc:非常感谢楼上! 我对XUL下的东西所知有限, 但使用DOMContentLoaded监听是对的。 因为load监听到的东西更广, 比如images加载也会触发load监听。 不知道你是在什么东西下写的测试脚本, 我在firefox2, userchrome.js下测试了下面的代码, 工作正常: 打开firefox窗口3秒后,自动关闭。 看来打开firefox窗口也会触发DOMContentLoaded, 所以你要在关闭一个窗口之前做更多的判断,以确定那确实是一个标签页。 (function() { function init() { setTimeout(function() { close(); },3000); } addEventListener("DOMContentLoaded",init,false); })(); |
|
4楼#
发布于:2008-03-10 11:37
甚感谢版主。
又发现了个问题, addEventListener("DOMContentLoaded",init,false); 之后,怎么卸载监听呢? |
|
5楼#
发布于:2008-03-10 11:37
removeEventListener("DOMContentLoaded",init,false);
如果一个监听需要被卸载,就不能使用匿名功能。如: addEventListener("DOMContentLoaded",function(){},false); removeEventListener("DOMContentLoaded",function(){},false); 这是行不通的。 |
|
6楼#
发布于:2008-03-10 11:37
非常感谢这个版块版主的热心帮助,非常感激。
实在不好意思,又遇到问题了 我想了下,实现原理可以是这样,每一个标签页在打开后都可以被监听到,那么在JS中只要设置30分钟后关闭自己这个标签页就可以了。 但问题就是,怎么判断并关闭自己所在的标签页呢?还得再烦请版主指点一下 |
|
7楼#
发布于:2008-03-10 11:37
msstbc:非常感谢这个版块版主的热心帮助,非常感激。 首先,我应该不是版主吧? 其次,我的方法也不一定对, 大家在这里切磋一下, 互相学习才是。 再次,我又有了新的方法。这个方法比较精确,即使没有加载页面也会关闭标签,并且没有误触发情况。 (function() { function init(e) { setTimeout(function() { gBrowser.removeTab(e.target); },3000); } gBrowser.tabContainer.addEventListener("TabOpen", init, false); })(); ![]() |
|
8楼#
发布于:2008-03-10 11:37
回楼上高手
您提供的方法我试了,我这里测试好像每次关闭的都是当前在活动的标签,不知何故。 我用的是FireFox 3b4 |
|
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); }()); |
|
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); } }, } |
|