詳解為什么Enyo可以調(diào)用webOS中的系統(tǒng)服務(wù)
Enyo1.0提供了五個service,分別是:
system: “palm://com.palm.systemservice/”
telephony: “palm://com.palm.telephony/”
database: “luna://com.palm.db/”
application: “palm://com.palm.applicationManager/”
accounts: “palm://com.palm.service.accounts/”
通過調(diào)用這些service,我們可以獲取很多與webOS系統(tǒng)相關(guān)的信息。那為什么webOS中的JavaScript(Enyo是JS框架)可以直接操作系統(tǒng)信息呢?
一切的秘密就在enyo\1.0\framework\source\palm\services\bridge\WebosConnect.js中。
在這個文件的59行開始,有下面的代碼:
可以看出,enyo在頁面中插入了一個applet標簽,這里加入了webOSconnect_1_3.jar這個jar包,并且將要調(diào)用包中的com.palm.webos.connect.DeviceConnection類。
而這個jar包,正是與系統(tǒng)數(shù)據(jù)直接交互的組件,jar包中沒有打入源碼,我們也就無法具體的實現(xiàn)了。
其中第二部分:“從JavaScript中訪問Java Applet小程序中的方法和變量”詳細解釋了調(diào)用流程。
我把其中的示例代碼貼出來:
“mytest.htm”
- function accessApplet()
- { setTimeout("changeText('I like JavaScript!')",1000);
- setTimeout("changeText('I like JavaScript and Java!')",2000);
- setTimeout("changeText('I like Java!')",3000);
- setTimeout("accessApplet()",4000);
- }
- function changeText(s)
- {
- window.document.testText.setText(s)
- //此處調(diào)用JavaApplet小程序的setText()方法
- //注意,小程序的名字必須為〈applet〉標志 name屬性所標識
- }
- //通過調(diào)用accessApplet()裝入小程序
“Testtext.java”
- import java.applet.*;
- ……
- public class Testtext extends Applet
- { ……
- public void setText(String s) //setText()必須聲明為“public”
- {
- text=s;
- repaint();
- }
- }