星期四, 九月 16, 2010

XUL的final-ui-startup,holy shit

未解决的问题。

目标:等待ui完全初始化完毕再执行某个init()函数。

看了如下一系列文档:
https://developer.mozilla.org/en/XUL_Questions_and_Answers
http://groups.google.com/group/mozilla.dev.tech.xul/browse_thread/thread/f0aa44a69e64dda5/b86f0e12f5941092?pli=1
https://developer.mozilla.org/en/XPCOM/Receiving_startup_notifications
https://developer.mozilla.org/en/Observer_Notifications
https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIObserverService
https://developer.mozilla.org/en/nsIObserver#Example_Code
https://developer.mozilla.org/en/Code_snippets/Miscellaneous
依然不知所云。
大概明白了是需要用XPCOM的Observer和Category Manager来捕获到final-ui-startup,然后调用init()。

但是N hrs的调研之后,依旧悲剧了,文档真是holy shit,不知所云。
google相关代码、文档,=0。

最后不得已,还是祭上土法:
window.addEventListener("load", function(e){
asetTimeout(function(){init();}, 1000);
}, false);

这个asetTimeout()是自己定义的一个延时函数:
TIMER_ON = true;
TIMER = Cc["@mozilla.org/timer;1"].createInstance(Components.interfaces.nsITimer);
TIMER_TYPE = Components.interfaces.nsITimer.TYPE_ONE_SHOT;
asetTimeout = function(func, delay) {
    if (TIMER_ON) {
        var ev = { notify:function(timer){func();} };
        TIMER.initWithCallback(ev, delay, TIMER_TYPE);
    }
};


没有评论: