锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
閫氳繃鎼滅儲,鍙戠幇鍘熸潵鏄疛DK鐗堟湰鐨勯棶棰?鎴戠敤鐨勬槸JDK6,涓嶅ソ浣?浣跨敤JDK7灝卞ソ浣夸簡.
濡傛灉鏈夊涓狫DK鐗堟湰鍏卞瓨,鍙互浣跨敤鍦╡clipse瀹夎鐩綍涓嬬殑鏂囦歡eclipse.ini鎸囧畾瑕佷嬌鐢ㄧ殑JDK:
-vm
C:/Program Files/Java/jdk1.7.0_55/bin/javaw.exe
閫氳繃鑿滃崟Window->Preferences鎵撳紑璁劇疆紿楀彛銆?/p>
鍏朵粬濡傛灉鏈塃ditor鐨勫湴鏂?緙╄繘涔熼兘瑕佹敼鎴?涓┖鏍? 姣斿: Web鑺傜偣涓嬮潰鐨凜SS Files, HTML Files.
涓嬭澆鍦板潃: http://windows.microsoft.com/zh-cn/windows-live/essentials-other#essentials=overviewother
* 浣跨敤Live Writer鍦?strong>oschina涓婂啓Blog: http://my.oschina.net/javayou/blog/39107
* 浣跨敤Live Writer鍦˙logJava涓婇瀷Blog: http://www.tkk7.com/vulcan/archive/2010/11/05/337323.html
娉ㄦ剰: - 鍦ㄦ棩蹇楃被鍨嬩腑閫夋嫨Metaweblog API
- API榪炴帴涓? http://www.tkk7.com/浣犵殑blog鍚嶇О/services/metaweblog.aspx
瑙e喅:
澶嶅埗 build-tool/17.0.0/ 涓嬫墍鏈夊唴瀹瑰埌 platform-tools 鐩綍涓?
鍙傝?
This Terminal Emulator is not functional because no 'bash' shell could be found. Please correct the problem and restart the IDE.
瑙e喅鍔炴硶:
鐒跺悗閲嶅惎緇堢灝卞ソ浜?
鍦╓ebView鎺т歡涓?濡傛灉欏甸潰涓皟鐢ㄤ簡javascript鑴氭湰console.log 鏂規硶,灝辮皟鐢ㄤ竴涓狫ava鏂規硶.
鍦ˋndroid鐨刉ebView鎺т歡涓?鏈変竴涓猻etChromeClient(WebChromeClient)鏂規硶,
姝ゆ柟娉曠殑鍙傛暟鏄疻ebChromeClient瀵硅薄,閫氳繃閲嶈澆姝ゅ璞′腑鐨刼nConsoleMessage鏂規硶灝?/p>
鍙互杈懼埌姝ょ洰鐨?鐪嬩唬鐮?
WebView webView = new WebView(); webView.setWebChromeClient(new DefaultWebChromeClient); // 浠ヤ笂浠g爜鏀懼湪鍦ˋctivity鎴栧垯Fragment涓殑onCreate鏂規硶涓? private class DefualtWebChromeClient extends WebChromeClient { @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { String message = consoleMessage.message(); int lineNumber = consoleMessage.lineNumber(); String sourceID = consoleMessage.sourceId(); String messageLevel = consoleMessage.message(); Log.i("[WebView]", String.format("[%s] sourceID: %s lineNumber: %n message: %s", messageLevel, sourceID, lineNumber, message)); return super.onConsoleMessage(consoleMessage); } @Override public void onConsoleMessage(String message, int lineNumber, String sourceID) { Log.i("[WebView]", String.format("sourceID: %s lineNumber: %n message: %s", sourceID, lineNumber, message)); super.onConsoleMessage(message, lineNumber, sourceID); } }
絎竴涓柟娉昽nConsoleMessage(ConsoleMessage consoleMessage)鏄柊鐗堟湰鐨刟ndroid鎵嶆湁鐨勬柟娉?絎簩涓柟娉曟槸鏃х増鏈殑.
絎簩涓柟娉曞凡緇忎笉鎺ㄨ崘浣跨敤浜?浣嗘槸鍦ㄦ棫鐗堟湰鐨刟ndroid涓?浠嶇劧闇瑕佹鏂規硶.鎵浠ユ渶濂戒袱涓柟娉曢兘瀹炵幇.
榛樿鐨勫疄鐜板湪鏌愪簺鐗堟湰鐨勬墜鏈轟腑涓嶅ソ浣?onConsoleMessage鏂規硶姝繪椿涓嶈璋冪敤
浣跨敤WebView鐨刟ddJavascriptInterface鏂規硶:
// 棣栧厛,瀹氫竴涓被,鍙粈涔堝悕縐伴兘鍙互,浣嗘槸閲岄潰鐨勬柟娉曞悕蹇呴』涓? // Javascript鐨刢onsole涓殑鏂規硶鍚嶅搴? private class Console{ private static final String TAG="[WebView]"; public void log(String msg){ Log.i(TAG,msg); } // 榪樺彲浠ユ坊鍔犲叾浠栫殑鏂規硶,姣斿: warn,assert絳夌瓑 } // 鐒跺悗,涓篧ebView娣誨姞瀵瑰簲鐨勬帴鍙? webView.addJavascriptInterface(new Console, "console");
榪欎釜瑙e喅鏂規鏈変竴涓笉濂界殑鍦版柟,灝辨槸杈撳嚭鐨勫唴瀹規病鏈塷nConsoleMessage鏂規硶閭d箞璇︾粏,姣斿琛屽彿,灝辨病娉曡緭鍑?
鎵浠?鎴戜滑搴旇鍦╫nConsoleMessage濂戒嬌鐨勬椂鍊欎嬌鐢╫nConsoleMessage,涓嶅ソ浣跨殑鏃跺欏湪浣跨敤鎴戜滑鑷畾涔夌殑鏂瑰紡.
閭d箞,濡備綍鏉ュ垽鏂璷nConsoleMessage鏄惁濂戒嬌鍛? 鎴戜滑鍙互鍦ㄧ▼搴忓垵濮嬪寲鐨勬椂鍊?鍏堝湪WebView涓繍琛屼竴涓媍onsole.log,
濡傛灉onConsoleMessage榪愯浜?灝辨坊鍔犱竴涓爣璁?琛ㄧず榛樿鐨勫疄鐜版槸濂戒嬌鐨?
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 榪欎簺浠g爜涔熷彲浠ユ斁鍒皁nCreate鏂規硶涓? this.webView = (WebView) layout.findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // Set WebChromeClient WebChromeClient webChromeClient = new TestConsoleMessageWebChromeClient(); // 鍏堟墽琛宑onsole.log,嫻嬭瘯鏄惁璋冪敤浜唎nConsoleMessage webView.loadUrl("javascript:console.log('testConsoleMessage')"); if (((TestConsoleMessageWebChromeClient)webChromeClient).isConsoleMessageOK()){ // 榪欓噷棰濆浣跨敤浜嗕竴涓柊鐨勭被 TestConsoleMessageWebChromeClient // 濡傛灉涓嶉傜敤TestConsoleMessageWebChromeClient,灝遍渶瑕佸湪 // DefaultWebChromeClient涓坊鍔犳爣璁板瓧孌?consoleMessageOK, // 榪欐牱濡傛灉鏂規硶onConsoleMessage濂戒嬌,閭d箞姣忔閮界粰consoleMessageOK璧嬪? // 榪欎釜鏈変簺澶氫綑,涔熷獎鍝嶆ц兘. webChromeClient = new DefualtWebChromeClient(); }else{ // onConsoleMessage涓嶅ソ浣?灝變嬌鐢ㄨ繖縐嶆柟寮?絎簩涓弬鏁板煎繀欏繪槸"console" webView.addJavascriptInterface(new Console(), "console"); } webView.loadUrl("http://www.baidu.com"); return super.onCreateView(inflater, container, savedInstanceState); } // 褰撻粯璁ょ殑onConsoleMessage涓嶅ソ浣跨殑鏃跺欎嬌鐢ㄧ殑綾? private class Console { private static final String TAG = "[WebView]"; public void log(String msg) { Log.i(TAG, msg); } // 榪欓噷榪樺彲浠ユ坊鍔犲叾浠栨柟娉昪onsole瀵硅薄涓湁鐨勬柟娉?姣斿 assert } // 榛樿 private class DefualtWebChromeClient extends WebChromeClient { @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { String message = consoleMessage.message(); int lineNumber = consoleMessage.lineNumber(); String sourceID = consoleMessage.sourceId(); String messageLevel = consoleMessage.message(); Log.i("[WebView]", String.format("[%s] sourceID: %s lineNumber: %n message: %s", messageLevel, sourceID, lineNumber, message)); return super.onConsoleMessage(consoleMessage); } @Override public void onConsoleMessage(String message, int lineNumber, String sourceID) { Log.i("[WebView]", String.format("sourceID: %s lineNumber: %n message: %s", sourceID, lineNumber, message)); super.onConsoleMessage(message, lineNumber, sourceID); } } // 鐢ㄤ簬嫻嬭瘯onConsoleMessage鏄惁璋冪敤鐨勭被 private class TestConsoleMessageWebChromeClient extends WebChromeClient { private boolean consoleMessageOK = false; @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { this.consoleMessageOK = true; return super.onConsoleMessage(consoleMessage); } @Override public void onConsoleMessage(String message, int lineNumber, String sourceID) { this.consoleMessageOK = true; super.onConsoleMessage(message, lineNumber, sourceID); } public boolean isConsoleMessageOK() { return this.consoleMessageOK; } }
1: // 鏂瑰紡涓,榪欑鏂瑰紡澶氱敤浜嗕竴涓嫭鍙?鐪嬬潃鍒壄
2: (function(param) {
3: alert(param);
4: })(10);
5:
6: // 鏂瑰紡浜?浣跨敤 ! 鎿嶄綔絎?/span>
7: !function(param) {
8: alert(param);
9: }(10);
浣跨敤鍖垮悕绔嬪嵆鎵ц鍑芥暟鐨勫ソ澶勬槸,鍙互閬垮厤鍙橀噺鍐茬獊.
1: //========================= 鏉′歡鍒ゆ柇
2: var sabiable = true;
3: //鏅氭柟寮?/span>
4: if (sabiable) {
5: alert('You are sability!');
6: }
7:
8: //璇″紓鏂瑰紡,鍒╃敤 ||鍜?&& 鎿嶄綔絎?/span>
9: // a||b : 鍙湁鍦╝涓篺asle鎴栬呰繑鍥瀎alse鏃舵墠浼氭墽琛宐,褰揳涓簍rue鏃?鐩存帴榪斿洖a,鍚庨潰鐨刡涓嶄細鎵ц
10: // a&&b : 鍙湁鍦╝涓簍rue鎴栬呰繑鍥瀟rue鏃舵墠浼氭墽琛宐,褰揳涓烘椂,鐩存帴榪斿洖a,鍚庨潰鐨刡涓嶄細鎵ц
11:
12: // 涓婇潰鐨勪唬鐮佸彲浠ユ敼涓?
13: sabiable && alert('You are sability!');
1: function ApplicationTabGroup(Window) {
2: //create module instance
3: var self = Ti.UI.createTabGroup();
4:
5: //create app tabs
6: var win1 = new Window(L('home')), win2 = new Window(L('settings'));
7:
8: var tab1 = Ti.UI.createTab({
9: title : L('home'),
10: icon : '/images/KS_nav_ui.png',
11: window : win1
12: });
13: win1.containingTab = tab1;
14:
15: var tab2 = Ti.UI.createTab({
16: title : L('settings'),
17: icon : '/images/KS_nav_views.png',
18: window : win2
19: });
20: win2.containingTab = tab2;
21:
22: self.addTab(tab1);
23: self.addTab(tab2);
24:
25: tab1.addEventListener('click',function(){
26: //榪欎釜浜嬩歡鍦╥OS涓笉浼氳瑙﹀彂
27: });
28:
29: return self;
30: };
31:
32: module.exports = ApplicationTabGroup;
瑙e喅鏂規:
閫氳繃鐪婽itanium闄勫甫鐨勭ず渚嬬▼搴?Kitcken Sink , 鎵懼埌浜嗚В鍐蟲柟妗?
涓篢abGroup娣誨姞focus浜嬩歡,鐒跺悗瀵逛簨浠跺弬鏁拌繘琛屽垽鏂?鏉ョ‘瀹氬綋鍓嶈鐐瑰嚮鐨勬槸閭d釜tab.
1: function ApplicationTabGroup(Window) {
2: //create module instance
3: var self = Ti.UI.createTabGroup();
4:
5: //create app tabs
6: var win1 = new Window(L('home')), win2 = new Window(L('settings'));
7:
8: var tab1 = Ti.UI.createTab({
9: title : L('home'),
10: icon : '/images/KS_nav_ui.png',
11: window : win1
12: });
13: win1.containingTab = tab1;
14:
15: var tab2 = Ti.UI.createTab({
16: title : L('settings'),
17: icon : '/images/KS_nav_views.png',
18: window : win2
19: });
20: win2.containingTab = tab2;
21:
22: self.addTab(tab1);
23: self.addTab(tab2);
24:
25: self.addEventListener('focus', function(e) {
26:
27: var info = Titanium.API.info;
28:
29: // 鍦╥OS涓? e.source 鏄?TabGroup瀵硅薄,
30: // 鍦ˋndroid涓?e.source 鏄?Tab瀵硅薄
31: var src = e.source;
32: var tab = e.tab;
33: var preTab = e.previousIndex;
34:
35: // e.tab 鏄綋鍓嶈幏寰楃劍鐐圭殑tab
36: // e.index 褰撳墠鑾峰緱鐒︾偣鐨則ab鐨勭儲寮?棣栨涓?1
37: // e.previousTab 涓婁釜tab
38: // e.previousIndex 涓婁釜tab鐨勭儲寮?棣栨涓簄ull
39:
40: // On iOS, the "More..." tab is actually a tab container, not a tab. When it is clicked, e.tab is undefined.
41: if (!tab) {
42: info('鍦╥OS涓偣鍑諱簡"More..."');
43: return;
44: }
45:
46: // 棣栨
47: if (!preTab) {
48: info('棣栨榪涘叆');
49: return;
50: }
51:
52: if (tab === tab1) {
53: info('鐐瑰嚮浜唗ab1');
54: } else if (tab === tab2) {
55: info('鐐瑰嚮浜唗ab2');
56: }
57: });
58:
59: return self;
60: };
61:
62: module.exports = ApplicationTabGroup;
闈?鎼炲緱鎴戜粈涔堟彃浠墮兘瀹夎涓嶄簡 :(
聽聽