【问题标题】:Fiiling the compose message at opening在打开时填写撰写消息
【发布时间】:2014-10-12 16:39:49
【问题描述】:

我正在绝望地寻找一种方法来在它打开时填写撰写消息,在一个 boostraped(无重启)TB 附加组件中。

这是我在我的非引导加载项 RemindIt 中所做的事情

感谢Superjos,我能够管理不同的侦听器,并在打开时让撰写消息充满我的自定义消息。

但是...这仅适用于新的(非回收的)窗口。如果我关闭一个撰写窗口,然后单击“新消息”,它会被回收(我猜)并且不会触发“加载”事件。

我尝试了不同的技巧(例如参见 onComposeInit2),但最后,我无法更改非新窗口的撰写消息,即使看起来我的插件正在调用编辑方法(这是可以在日志中看到)。

有什么想法吗?

查看我的 test/bootstrap.js 代码:

function log(s){
    Components.classes["@mozilla.org/consoleservice;1"]
    .getService(Components.interfaces.nsIConsoleService).logStringMessage("test: "+s);
}
// Thanks (a lot ! ) to Superjos :
// https://stackoverflow.com/questions/25989864/get-sender-and-recipients-in-thunderbird-extension-upon-sending-message

var winListener={
    onOpenWindow: function(win){
    compose=win.docShell.
      QueryInterface(Components.interfaces.nsIInterfaceRequestor).
      getInterface(Components.interfaces.nsIDOMWindow);
    compose.addEventListener('compose-window-init', winListener.onComposeInit, true);

    },
    onComposeInit: function(event){
    var document=event.currentTarget.document;   
    var edit=document.getElementById("content-frame");
    edit.addEventListener("load",winListener.onComposeLoad,true);

    log("compose init "+event.currentTarget);

    event.currentTarget.removeEventListener(event.type,winListener.onComposeInit , true);

    },


    onComposeLoad: function(event){
    var edit=event.currentTarget;
    var editor=edit.getHTMLEditor(edit.contentWindow);
    log("compose load");
    winListener.alterMessage(editor);
    },
    alterMessage: function(editor){
    var msg="Hello<br>";
    editor.insertHTML(msg);
    log("alter message "+editor);
    },

    onComposeInit2: function(event){
    var document=event.currentTarget.document;   
    var edit=document.getElementById("content-frame");
    edit.addEventListener("load",winListener.onComposeLoad,true);

    log("compose init "+event.currentTarget);

    var editor=edit.getHTMLEditor(edit.contentWindow);
    if( editor!=null ){
        // the editor is ready, remove load event listener
        edit.removeEventListener("load",winListener.onComposeLoad,true);
        // and call the method to alter message
        winListener.alterMessage(editor);
    }
    //edit.addEventListener("focus",winListener.onFocus,true);
    event.currentTarget.removeEventListener(event.type,winListener.onComposeInit2 , true);

    },
    /*
    onFocus: function(event){
    event.currentTarget.removeEventListener("focus",winListener.onFocus,true);
    var edit=event.currentTarget;
    var editor=edit.getHTMLEditor(edit.contentWindow);
    winListener.alterMessage(editor);
    log("focus");
    },
    onComposeClose: function(event){
    var document=event.currentTarget.document;   
    var edit=document.getElementById("content-frame");
    edit.addEventListener("focus",winListener.onFocus,true);
    log("close");

    }
*/

}



function startup(aData, aReason) {
    log("startup");

var windowMediator = Components.classes['@mozilla.org/appshell/window-mediator;1'].
  getService(Components.interfaces.nsIWindowMediator);

windowMediator.addListener(winListener);


}

function shutdown(aData, aReason) {
    log("shutdown");
    var windowMediator = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);  
    windowMediator.removeListener(winListener);

}

function install(aData, aReason) { 

    log("install");


}

function uninstall(aData, aReason) {
    log("uninstall");


 }

【问题讨论】:

    标签: thunderbird-addon


    【解决方案1】:

    我从这个http://forums.mozillazine.org/viewtopic.php?f=19&t=450474 找到了解决方案 窗口重新打开时会触发 compose-window-reopen 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多