Javascript 如何以编程方式向Thunderbird中的所有消息列表视图添加列

Javascript 如何以编程方式向Thunderbird中的所有消息列表视图添加列,javascript,xul,thunderbird,thunderbird-addon,Javascript,Xul,Thunderbird,Thunderbird Addon,我已经创建了一个扩展,它在主消息列表中添加了一个新列,基本上遵循以下命令。现在我想将列直接放在subject列之前,这似乎可以通过不保留序号字段和添加insertbefore属性来实现。但是,我仍然需要从列选择器中手动选择列以使其可见,并且我还需要为每个文件夹执行此操作。是否有一种方法可以将其自动插入到主题列之前的所有邮件视图中?我的目标是在安装扩展时,该列将自动显示在所有可能的消息视图中 我的XUL覆盖当前看起来如下所示: <overlay id="colovl" xm

我已经创建了一个扩展,它在主消息列表中添加了一个新列,基本上遵循以下命令。现在我想将列直接放在subject列之前,这似乎可以通过不保留序号字段和添加insertbefore属性来实现。但是,我仍然需要从列选择器中手动选择列以使其可见,并且我还需要为每个文件夹执行此操作。是否有一种方法可以将其自动插入到主题列之前的所有邮件视图中?我的目标是在安装扩展时,该列将自动显示在所有可能的消息视图中

我的XUL覆盖当前看起来如下所示:

<overlay id="colovl"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <script type="application/x-javascript" src="chrome://myext/content/column_overlay.js"/>
  <tree id="threadTree">
    <treecols id="threadCols">
    <splitter class="tree-splitter" />
    <treecol id="MyCol" insertbefore="subjectCol" fixed="true" 
           flex="2" hidden="false"
           class="treecol-image"
           label="MyCol" tooltiptext="Click to sort by MyCol" />
    </treecols>
  </tree>
</overlay>

Thunderbird 3.1有一个用户公开的操作,用于将当前文件夹的列布局应用于其他文件夹及其子文件夹。作为用户,您可以通过文件夹配置菜单的“将列应用到…”操作使用此操作

这意味着你想做的是可行的

该行动的实施情况载于。浏览源代码,有趣的部分从第167行开始。我复制了部分代码:

let destFolder = event.originalTarget._folder;
let parent = event.originalTarget.parentNode;
while (parent != noChildrenPopup && parent != yesChildrenPopup) {
   parent = parent.parentNode;
}

// Get the current folder's column state.
let propName = gFolderDisplay.PERSISTED_COLUMN_PROPERTY_NAME;
let dbFolderInfo =
  gFolderDisplay.displayedFolder.msgDatabase.dBFolderInfo;
let columnStateString = dbFolderInfo.getCharProperty(propName);
// Now propagate appropriately...
if (useChildren) {
  // Generate an observer notification when we have finished configuring
  // all folders.  This is currently done for the benefit of our mozmill
  // tests.
  function observerCallback() {
    let obsService =
       Components.classes["@mozilla.org/observer-service;1"]
                 .getService(Components.interfaces.nsIObserverService);
    obsService.notifyObservers(gFolderDisplay.displayedFolder,
                               "msg-folder-columns-propagated", "");
  }
  MailUtils.setStringPropertyOnFolderAndDescendents(propName,
                                                    columnStateString,
                                                    destFolder,
                                                    observerCallback);
}

我不确定您是否可以按原样重用代码,但它应该会为您提供一个起点的灵感。

Thunderbird 3.1有一个用户公开的操作,可以将当前的文件夹列布局应用于其他文件夹及其子文件夹。作为用户,您可以通过文件夹配置菜单的“将列应用到…”操作使用此操作

这意味着你想做的是可行的

该行动的实施情况载于。浏览源代码,有趣的部分从第167行开始。我复制了部分代码:

let destFolder = event.originalTarget._folder;
let parent = event.originalTarget.parentNode;
while (parent != noChildrenPopup && parent != yesChildrenPopup) {
   parent = parent.parentNode;
}

// Get the current folder's column state.
let propName = gFolderDisplay.PERSISTED_COLUMN_PROPERTY_NAME;
let dbFolderInfo =
  gFolderDisplay.displayedFolder.msgDatabase.dBFolderInfo;
let columnStateString = dbFolderInfo.getCharProperty(propName);
// Now propagate appropriately...
if (useChildren) {
  // Generate an observer notification when we have finished configuring
  // all folders.  This is currently done for the benefit of our mozmill
  // tests.
  function observerCallback() {
    let obsService =
       Components.classes["@mozilla.org/observer-service;1"]
                 .getService(Components.interfaces.nsIObserverService);
    obsService.notifyObservers(gFolderDisplay.displayedFolder,
                               "msg-folder-columns-propagated", "");
  }
  MailUtils.setStringPropertyOnFolderAndDescendents(propName,
                                                    columnStateString,
                                                    destFolder,
                                                    observerCallback);
}
我不确定您是否可以按原样重用代码,但它应该会为您提供一个起点的灵感