XPConnect Sample
出自 MozTW Wiki
XPConnect Sample
原版本
Ariel Blackenroth <arielb@rice.edu> Michael Ang <mang@subcarrier.org> Last modified 09/19/2006 14:21:29
在"錯了也沒關係"也沒關係的這個想法底下,我們寫出了這份指南。它還不成熟,所以還會再進行修改。
XPConnect 可以光靠 Javascript 就能完整控制整個 XPCOM 物件。在 Javascript 和 native code 之間的溝通是靠 XPIDL 介面定義的程序語言來控制的。可以參考 Roadmap for documentation on XPCOM, XPConnect, XPTCall and XPIDL 獲得更多資訊。
概觀
這份範例將展示如何透過 XPConnect 取用一個 XPCOM 物件,Javascript 會在頁面載入的>時候就用 components 物件創建一個實體(instance),然後透過nsISample 介面呼叫一個 QueryInterface 。
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var sample = Components.classes["@mozilla.org/sample;1"].createInstance(); sample = sample.QueryInterface(Components.interfaces.nsISample);
在表單上面的按鈕連接著 javascript 事件處理器,它會再去呼叫 C++ 程式碼中定義的功>能。
nsISample.idl 這個介面宣告了 XPCOM 物件。它定義了兩個函式跟所需要的的參數還有一個屬性。它同時>也設定好了這個介面的 id 。這個 idl 檔案是用 xpidl 編譯器編進 C++ 標頭檔。這些東>西包括 nsISample.h 還有一個 .xpt 的檔案在執行期間還會用再用到。
attribute string value; void writeValue(in string aPrefix); void poke(in string aValue);