Javascript 使用组织模式在emacs中管理firefox选项卡

Javascript 使用组织模式在emacs中管理firefox选项卡,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,我最近在emacs中找到了一种管理firefox选项卡的方法。这听起来有点疯狂。我使用树型标签(firefox插件)、MozRepl、emacs和组织模式来完成 对于10-15个选项卡,我的计划很有效。但是超过20个标签,我的firefox会随机挂起。可能是javascript堆栈溢出还是其他原因?我不知道我的代码出了什么问题。我在这里发布了最重要的代码。有人能帮我找到一些虫子吗 下面是一个基本的firefox chrome代码,您可以在firefox中运行它,而无需emacs和MozPepl

我最近在emacs中找到了一种管理firefox选项卡的方法。这听起来有点疯狂。我使用树型标签(firefox插件)、MozRepl、emacs和组织模式来完成

对于10-15个选项卡,我的计划很有效。但是超过20个标签,我的firefox会随机挂起。可能是javascript堆栈溢出还是其他原因?我不知道我的代码出了什么问题。我在这里发布了最重要的代码。有人能帮我找到一些虫子吗

下面是一个基本的firefox chrome代码,您可以在firefox中运行它,而无需emacs和MozPepl

我使用树型选项卡api获取选项卡,并将每个选项卡设置为一个cetain级别。输出将在组织模式的emacs中使用。 树样式选项卡api:

代码可以以多种方式运行。我推荐“工作区插件”。复制我的代码,选择chrome上下文运行它。

//获取选项卡标题和url的两个助手函数
函数getTitle(选项卡)
{ 
var brower=gBrowser.getBrowserForTab(选项卡)
var url=brower.currentURI.spec
var title=brower.contentTitle
返回标题
}
函数getUrl(选项卡)
{ 
var brower=gBrowser.getBrowserForTab(选项卡)
var url=brower.currentURI.spec
var title=brower.contentTitle
return”:属性:\n:URL:+URL+“\n:END:\n”
}
var L=gBrowser.tabContainer.childNodes.length//firefox选项卡长度
var str=”“//输出的全局字符串
//解析选项卡。如果tab有子项,则解析它。它没有子选项卡,只有输出。
对于(i=0;i
我不确定问题的具体原因,因为我无法重现它,但我看到这段代码存在大量问题。我不记得MozRepl是如何工作的,但是这段改进的代码应该为您提供一个很好的组织模式友好的选项卡输出。我希望这能帮助你,或者任何偶然发现这条线索的人

var bullet=“*”;//组织模式子弹
//两个助手函数,用于获取选项卡的标题和url
函数getTitle(tab){
var brower=gBrowser.getBrowserForTab(选项卡);
var url=brower.currentURI.spec;
var title=brower.contentTitle;
返回标题;
}
函数getUrl(制表符){
var brower=gBrowser.getBrowserForTab(选项卡);
var url=brower.currentURI.spec;
var title=brower.contentTitle;
return”:属性:\n:URL:“+URL+”\n:END:\n”;
}
//注意:我们将这些字符串生成函数计算出来,
//让事情更清楚一点
函数makeParentNodeOutput(选项卡,级别){
返回(数组+1级)。加入(项目符号)+
" [+] " +
getTitle(选项卡)+
“\n”+
getUrl(tab));
}
函数makeLeafNodeOutput(选项卡,级别){
返回(数组+1级)。加入(项目符号)+
" " +
getTitle(选项卡)+
“\n”+
getUrl(tab));
}
//注意:我们只需要处理标签集合的解析
//在一个地方,我们这里有一个函数。
函数parseTabCollection(选项卡,级别){
var-currentTab;
var outputString=“”;
对于(变量i=0;i

我希望这能有所帮助。

天哪,这真是个好主意。我也使用树型选项卡和emacs组织模式,将两者结合起来是非常疯狂的。
// two helper function to get title and url of tab
function getTitle(tab)
{ 
    var brower = gBrowser.getBrowserForTab(tab)
    var url = brower.currentURI.spec
    var title = brower.contentTitle
    return title
}
function getUrl(tab)
{ 
    var brower = gBrowser.getBrowserForTab(tab)
    var url = brower.currentURI.spec
    var title = brower.contentTitle
    return ":PROPERTIES:\n:URL:"+url+"\n:END:\n"
}

var L = gBrowser.tabContainer.childNodes.length //firefox tabs length
var str = "" //global string for output

//parse tabs. If tab has child, parse it. It tab has no child, just output.
for(i = 0; i < L; i++){
    level = "*"
    tab = gBrowser.tabContainer.childNodes[i]
    if ('TreeStyleTabService' in window){
    if(TreeStyleTabService.hasChildTabs(tab))
    {
      str = [str, level, " [+] ",  getTitle(tab), "\n", getUrl(tab)].join("") //output title and url. level used in org-mode
      treeparse(TreeStyleTabService.getChildTabs(tab), "**") //if a tab has child tabs. parse it and level up
    }   
str = [str, level, " ",  getTitle(tab), "\n", getUrl(tab)].join("")
}

function treeparse(tablist,level) //parse a list of tabs. If tab has not a child, output. If it has childs, parse again
{
    for(i=0 ; i < tablist.length;i++) {
    tab = tablist[i]
    if ('TreeStyleTabService' in window){
        if(TreeStyleTabService.hasChildTabs(tab))
        {
        str = [str, level, " [+] ",  getTitle(tab), "\n", getUrl(tab)].join("")
        newlevel = level + "*"
        treeparse(TreeStyleTabService.getChildTabs(tab),newlevel)       
        }
        } }
    str = [str, level, " ",  getTitle(tab), "\n", getUrl(tab)].join("")
    }
}

alert(str) //alert to view result. You can also write the result into a file.