幞ããªããšã«ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãäœæããæ¹æ³ã¯è€æ°ãããŸãã ããªãã¯ãµã€ããäœããç¹å¥ãªæ¹æ³ã§ãããããã¯ããåºæ¥äžãããããã«ã¢ããªã±ãŒã·ã§ã³ããããŸãïŒ
ãããžã§ã¯ãããã®æ¹æ³ã«ã€ããŠæäŸããã®ã¯ãã®ã¢ãããŒãã§ããããã®èšäºã«ã€ããŠèª¬æããŸãã
ãã®ã¢ãããŒãã®çµæžçå®çŸå¯èœæ§ã«ã€ããŠè°è«ãã䟡å€ã¯ãªããšç¢ºä¿¡ããŠããŸãã 圌女ã¯é¡ãããŠããŸãã ã¯ããå¹³åçãªWebéçºè
ãããå€ãã®ç¥èãå¿
èŠã§ãããããã§ããããã¯ãµã€ãã§ãïŒ ããã¯ç解ã§ããŸãïŒ ããã¯åãHTMLãåããã©ãŠã¶ãåãJavascriptã§ãã éçºè
ãèŠã€ããã®ã¯ãããã€ãã£ãããšèšãã»ã©é£ãããããŸããã ãããŠããã®ãœãªã¥ãŒã·ã§ã³ã®ã¯ãã¹ãã©ãããã©ãŒã ã®æ§è³ªãæãåããããšãäžèœè¬ã®ããã«èŠããããšãããããŸãã ãã¡ãããããã«ããååšããªãããšã¯èª°ããç¥ã£ãŠããŸãããå Žåã«ãã£ãŠã¯ãããå®éã«æè¯ã®å®è·µã§ã
ãããã£ãŠãç§ã®ä»äºã¯æ¬¡ã®ãšããã§ãããAndroidçšã®ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãéçºããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ã²ãŒã ã§ãã ã¯ãšã¹ãã ã²ãŒã ã®æ¬è³ªã¯æ¬¡ã®ãšããã§ããé¢çœããªã©ãã¯ã¹ããã人ã®ã°ã«ãŒãã¯ããŒã ã«åããããŸãã åããŒã ã«ã¯ã¹ããŒããã©ã³ãäžããããŸãã ã¹ããŒããã©ã³ã¢ããªã±ãŒã·ã§ã³ã ã¢ããªã±ãŒã·ã§ã³ãéããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãµãŒããŒã«æ¥ç¶ãããããã質åãæ¥ãŸãã ããŒã ããšã«ç°ãªããŸãã 質åã¯ãåçãªãã·ã§ã³ãåããæ®éã®è³ªåã®ããã«èŠãããããããŸãããããšãã°ããµã³ã¯ãããã«ãã«ã¯ã®è¡ã¯äœæ³ã§ããïŒ å·¥åŠã®åã®æ£é¢çé¢ãèŠã€ããŸãã ããŒã ã移åããå
¥ãå£ãèŠã€ããã¯ãªãã¯ããŸããæå®ã®å Žæã«é
眮ããã座æšããµãŒããŒã«ç§»åããŸãã ãµãŒããŒããã®çãã¯æ£ãããã©ããã åçã«é¢ãã質åããããŸãã ããšãã°ãå·¥åŠã®åãèæ¯ã«èªåã®åçãæ®ããŸãã åèšã§ããã¹ãŠã®åçãè©äŸ¡ããããã®çµæãããŒã ã®1ã€ãåã¡ãããå€ãã®ãã€ã³ããç²åŸããŸãã èŠããã«ããã¹ãŠã
ã¹ããã1-ãããã¿ã€ã
äžè¬çã«ãã¿ã¹ã¯ã¯ç§ãã¡ã«ãšã£ãŠæ確ã§ãã åç
§æ¡ä»¶ããã§ã«äœæãããŠãããšããŸãã ä»ã«äœïŒ ãããã¿ã€ããå¿
èŠã§ãã ããã«ãããŸãïŒ
ã¹ããã2-ã¬ã€ã¢ãŠã
次ã®ã¹ãããã ããªãã¯ããããåŒãåºãå¿
èŠããããŸãã ä»äºã«åãæãããšã次ã®ããšãããããŸããã
ã¹ããã3-ãã¬ãŒã ã¯ãŒã¯ãéžæãã
å®éããããã®2ã€ããããŸãã
1. Sencha Touch
http://www.sencha.com/products/touch
2. Jquerymobile
http://jquerymobile.com/
Sencha Touchã䜿çšããŠãã ããã ãã¬ãŒã ã¯ãŒã¯ã¯ExtJSã«äŒŒãŠããŸãã å€æ°ã®ã¯ã©ã¹ã ããããæ§æããæ§æããŸã-ã¢ããªã±ãŒã·ã§ã³ãååŸããŸãã HTMLèŠçŽ ã«ã¢ã¯ã»ã¹ã§ããŸããããã¬ãŒã ã¯ãŒã¯ã¬ãã«ã§èŠçŽ ã管çããããšã¯éåžžã«è³¢æã§ã¯ãããŸããã 倧ãŸãã«èšãã°ãèŠçŽ ã®æšæºçãªèŠèŠè¡šç€ºãå€æŽããããšã¯éåžžã«å°é£ã§ãã ãã ãããµãŒããŒããJSON圢åŒã§ããŒã¿ãååŸããã®ã¯æ¥œããããšã§ãã
ãããŠãã®éã jquerymobileã¯èŠçŽ ãžã®ã¢ã¯ã»ã¹ã§ãããjqueryã«ãã£ãŠæ¬è³ªçã«åŒ·åãããŠããŸãã ã¿ã°ãèŠçŽ ã«è¿œå ãããŸãã ããŒãåŸããããã®ã¿ã°ã®ãã¬ãŒã ã¯ãŒã¯ã¯èŠçŽ ãã¹ã¿ã€ã«ããã®ä»ã®èŠçŽ ã§è£å®ããŸãã ãããããµãŒããŒããã®JSONããŒã¿ãšåéãäœãããšã«æåããŸããã§ããã Jquerymobileã¯ããµãŒããŒããã®HTMLã³ãŒããäºæããŸãã ãã¡ãããJSONãååŸããã¯ã©ã€ã¢ã³ãåŽã§ãããHTMLã³ãŒãã«å€æã§ããŸããããã¯Senchaãå®éã«è¡ã£ãŠããŸãã ããããããã¯è¯ãç¿æ
£ã§ã¯ãããŸããã ããã¯ããã¬ãŒã ã¯ãŒã¯ã®ã€ããªãã®ãŒã«åããŸãã 解決ããã®ãéåžžã«é£ããå€ãã®åé¡ããããŸãã
ãã㊠ãªããã¬ãŒã ã¯ãŒã¯ãå¿
èŠãªã®ã§ããïŒ å®éãããã¯ããã°ãæ¢æã®èŠçŽ ããŒã¹ã§ãããæ¢æã®ãœãªã¥ãŒã·ã§ã³ã§ãããã®ç®çã¯ãã¢ããªã±ãŒã·ã§ã³ïŒãµã€ãïŒããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã«èŠèŠçã«äŒŒããã®ã«ããããšã§ãã ãããå¿
èŠã§ããïŒ ãã PhoneGapã¯ã©ãã§ããïŒ ãããŠåœŒã¯äœã§ããã圌ã¯ããªããäœã䜿ããæ°ã«ããŸããã ãããå¶éãªãã ããã§ã¯ãéåžžã®ãµã€ãã®ããã«ã¢ããªã±ãŒã·ã§ã³ãäœæããŠãçµããã«å¯ŸåŠããŸãããïŒ
ã¹ããã4-ã¬ã€ã¢ãŠã
ã¬ã€ã¢ãŠãããã»ã¹èªäœã¯æšæºãšå€ãããŸããã 確ãã«åŸ®åŠãªéããããã®ã§ããããã«ã€ããŠè©±ããŸãããã æåã®ãã®ãããªãã¥ã¢ã³ã¹ã¯ã¡ã¿ã¿ã°ã§ãã
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
htmlã³ãŒãã®ããããŒã«ãã®è¡ããªããšãã¢ããªã±ãŒã·ã§ã³ã¯éåžžã®ãµã€ããšããŠè¡šç€ºãããŸãã ãã©ãŠã¶ã¯ãºãŒã ããŸãããã¢ããªã±ãŒã·ã§ã³ã«ãªã¢ãªãºã ã¯è¿œå ãããŸããã
ãã¹ã¯ããããã©ãŠã¶ãšã¯ç°ãªããæºåž¯é»è©±ãã©ãŠã¶ïŒãããããã¹ãŠã§ã¯ãªãïŒã¯ããã©ãŒã«ã¹ãèšå®ãããèŠçŽ ã«ãã¬ãŒã ãè¿œå ããŸãã Google Chromeã§ã¯ã次ã®ãã£ãŒã«ãã«ããŒã¿ãå
¥åããæç¹ã§ãçŠç¹ãåããããšåæ§ã®ãã¬ãŒã ãããã©ã«ãã§è¡šç€ºãããŸãã åæ§ã«æ±ãããŸãã
input:focus { outline: 0 none; } textarea:focus { outline: 0 none; } .Button:focus { outline: 0 none; }
ãããŠãææ°ã®ãã¥ã¢ã³ã¹ã¯äœçœ®ã§ãïŒä¿®æ£ãããŸããã ãããŠãæ®éçãªè§£æ±ºçããªããããããã¯æ¬åœã«åé¡ã§ãã ãã¹ãŠã¯ã¢ãã€ã«ãã©ãŠã¶ãŒèªäœã«ããã£ãŠããããã®ãããªæ©èœããµããŒãããŠããªãããŸãã¯ãµããŒãããŠããããå®å
šã«ã¯ãµããŒãããŠããŸããã ãŸãããã¹ãŠã®å Žåã«1ã€ã®ãœãªã¥ãŒã·ã§ã³ã§ã³ã³ãããŒã«ããã«ãä¿®æ£ããããšãã§ããŸããã ããšãã°ãããŒãžã§ã³1.1ãŸã§ã®jquerymobileã¯ããã©ãŠã¶ãŒãäœçœ®ããµããŒãããŠããªãå ŽåïŒåºå®ããšãã¥ã¬ãŒããããã¹ã¯ããŒã«ãããã³åºå®èŠçŽ ã®äœçœ®ãåçã«å€æŽããŸããããã¯äžè¬ã«ãªã¢ãªãºã ãäžããããæ°·ããªããããã«èŠããŸãã
ãã®ãªã³ã¯ã«ã¯ãäœçœ®ããµããŒãããã¢ãã€ã«ãã©ãŠã¶ã®èª¬æããããŸãïŒä¿®æ£æžã¿
bradfrostweb.com/blog/mobile/fixed-position
ãŸããäœçœ®ã®äœæ¥ããšãã¥ã¬ãŒãããJavascriptã©ã€ãã©ãªãžã®ãªã³ã¯ããããŸãïŒåºå®ããã³ã¹ã¯ããŒã«ããã»ã¹ã æ®å¿µãªããããããã®ã©ããæºè¶³ã®ãããã®ãšã¯èšããŸããã
ç§ã®ç¹å®ã®ã±ãŒã¹ã§ã¯ãã¢ãã€ã«ãã©ãããã©ãŒã ã¯Android 2.3ãšããŠãªã¹ããããŠãããpositionïŒfixedããµããŒãããŠããŸãããã«ã¹ã¿ã ãºãŒã ã¯æ©èœããŸãããããã¯ã¢ããªã±ãŒã·ã§ã³ã§ã¯æ¬è³ªçã«åœ¹ã«ç«ã¡ãŸããã ãã¥ãŒããŒãããããŒã§æå®ãã
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
ãããŠãã¹ã¿ã€ã«ãåŠæ¹ãã
.Header { background-color: white; background-image: none; border: none; text-shadow: none; border-bottom: white solid 3px; font-weight: bold; position: fixed; width: 100%; height: 62px; top: 0; left: 0; z-index: 100 }
以äžã§ãã
ã¹ããã5-ãšãã¥ã¬ãŒã¿ãŒ
çµçããŠãã©ãŠã¶ãã¢ãã¿ãŒãŠã£ã³ããŠãèŠãã®ã¯é£ããããšã¯æããã§ãã 320x480ãªã©ã®è§£å床ã®Androidã¢ããªã±ãŒã·ã§ã³ãšãã¢ãã¿ãŒã®ç»é¢ãµã€ãºã¯ïŒ ãšãã¥ã¬ãŒã¿ãŒãå©ãã«ãªããŸãã æãç°¡åãªãšãã¥ã¬ãŒã¿ãŒã¯æ¢ã«ãã©ãŠã¶ãŒã«ãããŸãïŒ Google Chromeã§ããŒãžãããŒãããCtrl + Shift + IãæŒããšããã©ãŠã¶ãŒã«éçºè
ããŒã«ã衚瀺ãããŸãã å³äžé
ã«æ¯è»ã®ã¢ã€ã³ã³ãããããããã¯ãªãã¯ããŸãã 次ã«ã[äžæžã]ã¿ããéžæããŸããããã«ã¯ãšãã¥ã¬ãŒã¿ãŒããããŸãã ãŠãŒã¶ãŒãšãŒãžã§ã³ããéžæãã[ããã€ã¹ã¡ããªãã¯]ãã§ãã¯ããã¯ã¹ããªã³ã«ããŸãã æåã®æ®µéã§ã¯ããã§ååã§ãã
ãããŠãPhoneGapèªäœãããšãã¥ã¬ãŒã¿ãŒããããŸãïŒ emulate.phonegap.com
ãªããã«ãšåŒã°ããŸãã ããã¯ãGoogle Chromeãžã®è¿œå ãšãã圢ã§æäŸãããŸãã ãã£ãïŒ ç§ãã¡ã®æ©äŒã¯åçã«å¢å ããŸããã ã¢ããªã±ãŒã·ã§ã³ã§Cordovaã©ã€ãã©ãªã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®æ©èœãæ¡åŒµããå Žåãããšãã°é»è©±ã«ã¡ã©ãã³ã³ãã¹ã䜿çšããå ŽåãRippleã¯ãããã®ããã»ã¹ãã·ãã¥ã¬ãŒãããæ©äŒãæäŸããŸãã
ãããšããšãã¥ã¬ãŒã¿ãŒã«ã€ããŠè©±ããŠããã®ã§ãPhonegapã®æ瀺ã«åŸãã°ãEclipseãšå
±ã«ã€ã³ã¹ããŒã«ããããšãã¥ã¬ãŒã¿ãŒã«ã€ããŠã¯èšããŸããã
docs.phonegap.com/en/2.2.0/guide_getting-started_android_index.md.html#Getting%20Started%20with%20Android
ãã®ãšãã¥ã¬ãŒã¿ã¯ããã§ã«å®éã®ããã€ã¹ã®ããã«åäœããŸãã ãã®ãšãã¥ã¬ãŒã¿ã§èŠã€ãã£ããã¹ãŠã®ãšã©ãŒã¯ããã¹ãŠããã€ã¹ã§åæ§ã«èŠã€ãããŸããã ãããŠãã¡ããããã®ãšãã¥ã¬ãŒã¿ãŒã®äœ¿çšã¯æäœäžé£ãããšèšããªããã°ãªããŸããã èªã¿èŸŒã¿ã«æéãããããããã¹ããå
¥åããã®ãé£ããããªã©ã æåŸã®æ®µéã«é©ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ãæ¢ã«ãªã¹ããããŠããä»ã®ãã¹ãŠã®ãšãã¥ã¬ãŒã¿ãŒã§æ¢ã«æ£åžžã«åäœããŠããå Žåã
ã¹ããã6-ããã°ã©ãã³ã°
ãã®èšäºã¯ããã°ã©ããŒåãã§ããããã¹ãŠã®ã³ãŒããããã«çœ®ãã®ã¯ã°ãããŠããŸãã äžè¬çã«èª¬æããŸãã Webã¢ããªã±ãŒã·ã§ã³ã®ããã°ã©ãã³ã°ã¯ãå°ããªãµã€ãã®ããã°ã©ãã³ã°ãšæ¬è³ªçã«å€ãããŸããã ããã§ã¯åãã¡ãœãããšã¢ãããŒãã§ãããJavascriptã§å®è£
ãããŠããŸãã åãMVCãåããã¿ãŒã³ïŒã·ã³ã°ã«ãã³ããªã³ã«ãŒãªã©ã
ãã¡ããããã³ãã³ã³ãããŒã©ãŒã§ã
var App = { Init: function() { this.model = new Model(this.url); this.view = new View(); this.controller = new Controller({ model: this.model, view: this.view }); return this; }, Run: function(task, params) { if (typeof task == 'undefined') { this.controller.Login(); } else if (typeof this.controller[task] == 'undefined') { this.controller.Login(); } else { this.controller[task](params); } return this; }, Done: function() { return this; } } $(document).ready(function() { App.Init(); App.Run(); App.Done(); });
* javascriptã«ã¯éæ³ã®ã¡ãœããã¯ãããŸããã PHPã§__callã䜿çšããŠApp.SomeSomeïŒ '<parameters>'ïŒãåŒã³åºãããšãã§ããå ŽåãApp.RunïŒ 'SomeSome'ã '<parameters>'ïŒãèšè¿°ããå¿
èŠããããŸã
次ã«ã³ã³ãããŒã©ãŒã®äŸã瀺ããŸãã
var Controller = function(params) { this.view = params.view; this.model = params.model; } Controller.prototype = { Login: function() { this.view.Login(); }, LoginSubmit: function() { var that = this, value = this.model.GetLoginFormValue(), errors = this.model.GetLoginFormErrors(); if (errors !== false) { this.view.Login(value, errors); } else { this.model.SendToServer('teamLogin', value, function(err, data) { if (!err) { that.model.SetTeam(data); that.model.ListenServer(data.lastMessageId); that.Welcome(); } else { that.view.ShowPopup('error', data) } }); } }, Welcome: function() { var that = this; this.model.GetWelcomeContent(function(err, data) { if (!err) { that.view.Welcome(data); } else { that.view.ShowPopup('error', data); } }); }
ããã¯å°ããªã¢ãã«ã®äŸã§ã
var Model = function(url) { this.url = url; } Model.prototype = { GetHelpChat: function(callback) { var url = 'helpChat?team='+this.team.teamId+'&hash='+this.team.hash; this.ReciveFromServer(url, function(err, data) { if (err) { callback(true, data); } else { callback(false, data); } }); },
ããããã¥ãŒã®äŸã§ã
var View = function() { this.page = $('.Page'); } View.prototype = { TaskIndex: function(status, time, tasks) { var num = Util.GetRndNumber(); this.Show( Html.Header( Html.IconPanel(status), Html.TimePanel(time) ), Html.Content( Html.TaskPanel(tasks) ), Html.Footer( Html.ButtonPanelBottom('task') ) ); setInterval(Timer.Total, 1000); setInterval(Timer.Current, 1000); Util.SetScrollToTop(); },
å®éããµã€ããPHPã§äœæãããŠããå Žåãšåãã§ãã åºæ¬çãªååãé€ããŠãJavascriptã¯éåæèšèªã§ãããã³ãŒã«ããã¯ããªããã°ãããã§ã¯ãããŸããïŒãã¡ããç¹å¥ãªã©ã€ãã©ãªã䜿çšããªãéãïŒ
ãŸãããã¥ã¢ã³ã¹ãã€ãŸãã¹ããŒããã©ã³ã®ã«ã¡ã©ã§ã®äœæ¥ã«ã€ããŠã説æããŸãã ç®±ããåºããŠãjavascriptã¯ãããè¡ãããšãã§ããŸããã Cordovaã©ã€ãã©ãªãŒãå©ããšãªããPhoneGapãæ¥ç¶ãæäŸããŸãã ãããŠãããã«æºåž¯é»è©±ã®ã«ã¡ã©ã®æäœã®èª¬æãžã®ãªã³ã¯ããããŸã
http://docs.phonegap.com/en/2.2.0/cordova_camera_camera.md.html#Camera
é«åºŠãªJavascriptæ©èœãç¹ã«ã«ã¡ã©ã§äœæ¥ããå Žåãã»ãšãã©ã®åé¡ãäºæ³ãããŸããã ç¡é§ã§ã¯ãããŸããã ç§ãæåã«çŽé¢ããªããã°ãªããªãã£ãããšã¯ãåçãæ®ã£ãåŸãã«ã¡ã©ãåã«é»ãç»é¢ãèŠããã¢ããªã±ãŒã·ã§ã³ã«æ»ããªãã£ãããšã§ãã å€æããããã«ãããã¯ããã©ã«ãã§åçãæé«å質ã§æ®åœ±ããããã¡ã€ã«ã倧ããã£ããšããäºå®ã«ãããã®ã§ãã é»è©±èªäœã®é»åãäœããããã¢ããªã±ãŒã·ã§ã³ã«è»¢éããããã»ã¹ã«ã¯ããªãã®æéãããããŸãã ãã¢ã³ãŒããå€æŽããå¿
èŠããããŸãã
navigator.camera.getPicture(OnSuccess, OnFail, { quality: 75, allowEdit: true, targetWidth: 280, targetHeight: 280, destinationType: destinationType.DATA_URL });
ããããããã ãã§ã¯ãããŸããã§ããã getPictureã¡ãœããã¯base64ã§ãšã³ã³ãŒããããç»åãè¿ããŸããããµãŒããŒãšã¯ã©ã€ã¢ã³ãéã®ããŒã¿ã¯JSONPãªã¯ãšã¹ããšããŠéä¿¡ãããŸãã
æããã«ãGETãªã¯ãšã¹ããä»ããŠãã®ãããªéã®ããŒã¿ãéä¿¡ããããšã¯äžå¯èœã§ãã ãšããã§ããµãŒããŒã®éšåã¯ãPHPã§è©±ãããã©ãããèŠããŠããŸããã ã¯ããæåã®è§£æ±ºçã§ã¯ãããŸãããWebSocketãå¿ããããšãã§ããŸãã ãããã·ãè¡ãããŸããã ããããããã®åé¡ã®è§£æ±ºçã¯æãå°é£ãªãã®ã®1ã€ã§ããã ãããŠã解決çã¯æ¬¡ã®ãšããã§ããã æéãçµã€ãšæšæºã¯ã©ã¹ãæ¡å€§ããæ°ããã¡ãœãããè¿œå ãããŸãã ãã®ãããXMLHttpRequestã¯ã©ã¹ã«ã¯æ°ããã€ãã³ãããããŸãã æšæºã®onreadystatechangeã«å ããŠãonloadã€ãã³ããç»å ŽããŸããã ãµãŒããŒããã®å¿çã®ãã³ãã©ãŒãããã³ã°ãããContent-TypeããããŒã§application / x-form-urlencodedãæå®ãããšããã©ãŠã¶ãŒã¯POSTã¡ãœããã䜿çšããŠã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ããè¡ããŸããããã¯ãŸãã«å¿
èŠãªããšã§ãã ããã«äŸããããŸã
var xhr = new XMLHttpRequest(); xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onload = function(e) { if (this.readyState == 4) { if (this.status == 200) { var r = JSON.parse(this.responseText); if (r.success) { callback(false, r.data); } else { callback(true, r.message); } } else { that.view.ShowPopupWindow('Error', msg.ERROR_CONNECTION); } } }
ããã§ããéåžžã«éèŠãªãã€ã³ãã äžèšã®ã³ãŒãã¯éåæã®ããã«èŠããŸãããã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ãã¯ãã©ã®ããã«å®è£
ãããŠããŠãåæçã§ãã
ãŸããåäžçæå
ããªã·ãŒã®åé¡ãçºçããŸããã ãã®åé¡ã®è§£æ±ºçã¯ãµãŒããŒåŽã«ãããŸãã æ§æãã¡ã€ã«ã§ã¯ãã¯ãã¹ãã¡ã€ã³ãªã¯ãšã¹ãã®èš±å¯ãšãšã³ãã®åŠçãèš±å¯ãããŸãã
FormData APIãè©ŠããŸãã
developer.mozilla.org/en-US/docs/Web/API/FormData?redirectlocale=en-US&redirectslug=Web%2FAPI%2FXMLHttpRequest%2FFormData
ããããæ®å¿µãªããããã®APIãæºåž¯é»è©±ã®ãã©ãŠã¶ã¯ãµããŒãããŠããŸããã
ãŸããæºåž¯é»è©±ãæäœããããã®é«åºŠãªæ©èœãäžèŠãªå Žåã¯ãå é床èšãã³ã³ãã¹ãã«ã¡ã©ãã¡ãã£ã¢ãªã©ãã泚æãã ããã cordovaã©ã€ãã©ãªã®æ¥ç¶ã¯ãªãã·ã§ã³ã§ãïŒçŽ300ãããã€ãïŒã ã¡ãªã¿ã«ããžãªãã±ãŒã·ã§ã³ã¯ãããªãã§å©çšå¯èœã§ãã
ã¹ããã7-ãããã°
ããã§ã¢ããªã±ãŒã·ã§ã³ã®æºåãã§ããŸããã Rippleãšãã¥ã¬ãŒã¿ãŒã§å®å
šã«èšèšããã³åäœããŸããïŒãšãã¥ã¬ãŒã¿ãŒã«é¢ããã»ã¯ã·ã§ã³ãåç
§ïŒã 楜ããéšåãã€ãŸãé»è©±ã§ã®ãããã°ãå§ãŸããŸãã ããããæåã«ãEclipseã§ãšãã¥ã¬ãŒã¿ãŒã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠã¿ãŠãã ããã ãšãã¥ã¬ãŒã¿äžã§åã¢ããªã±ãŒã·ã§ã³ãèµ·åããåã«ãã·ã¹ãã ã¯ãããžã§ã¯ãã®ã¯ãªãŒã³ã¢ãããèŠæ±ããŸãã ãããžã§ã¯ã->ã¯ãªãŒã³ã ãããããããšãå¿ããªãã§ãã ããã [å®è¡]ãã¯ãªãã¯ããŸãã
ãšãã¥ã¬ãŒã¿ãŒãããŒããããšãLogCat Eclipseããã«ã«å€§éã®ã¡ãã»ãŒãžã衚瀺ãããŸãã çºçããæåã®è³ªåã¯ç§ãã¡ã®ãã®ã§ããïŒ ãšã©ãŒã®ã¿ãç¹ã«ã³ã³ãœãŒã«ã®console.logã«ã¢ããªã±ãŒã·ã§ã³ã衚瀺ããã¡ãã»ãŒãžã衚瀺ããã«ã¯ããã£ã«ã¿ãŒãæ§æããå¿
èŠããããŸãã LogCatããã«ã®å·ŠåŽã«ã¯ãä¿åããããã£ã«ã¿ãŒãšããå¥ã®ãããã¯ããããŸãã éããšããã£ã«ã¿ããŸã ãªãããã空ã®ãªã¹ãã衚瀺ãããŸãã ãã©ã¹èšå·ãã¯ãªãã¯ããŠããŠã£ã³ããŠã衚瀺ããŸã
åçã®ããã«Log Tag Webã³ã³ãœãŒã«ã«å
¥åãããšãLog Consoleã«Webã¢ããªã±ãŒã·ã§ã³ããã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
äºæ³ã©ããããã©ãŠã¶ãŒã®ãšãã¥ã¬ãŒã¿ãŒã¯Eclipseã®ãšãã¥ã¬ãŒã¿ãŒã«ã¯ã»ã©é ãã§ãã å®éã以åã¯ãªãã£ããšã©ãŒããããŸããã
JSCallback Error: Request failed with status 0 at :1180915830
ãšã©ãŒã®èª¿æ»ãéå§ããŸãã ãµãŒããŒããããŒã¿ãåä¿¡ãããšãæããã«ãšã©ãŒãçºçããŸãã ãã®ãšã©ãŒã¯ãã¹ããŒã¿ã¹0ãè¿ã¥ããŠããããšã瀺ããŠããŸããGoogleã§è§£æ±ºçãæ¢ãå§ããŸããã
simonmacdonald.blogspot.ru/2011/12/on-third-day-of-phonegapping-getting.html
stackoverflow.com/questions/11230685/phonegap-android-status-0-returned-from-webservice
çµè«ïŒãµãŒããŒå¿çã®åŠçãç¶è¡ããã«ã¯ãããããæ£ããã¹ããŒã¿ã¹ãšããŠã¹ããŒã¿ã¹0ãè¿œå ããå¿
èŠããããŸãã ãããã®JSCallbackã¡ãã»ãŒãžã®å Žæãæ¢ãã3740è¡ç®ã®cordova.jsãã¡ã€ã«ïŒcordova-2.1.0.jsïŒã§èŠã€ããŸãã
function startXhr() { // cordova/exec depends on this module, so we can't require cordova/exec on the module level. var exec = require('cordova/exec'), xmlhttp = new XMLHttpRequest(); // Callback function when XMLHttpRequest is ready xmlhttp.onreadystatechange=function(){ if (!xmlhttp) { return; } if (xmlhttp.readyState === 4){ // If callback has JavaScript statement to execute if (xmlhttp.status === 200) { // Need to url decode the response var msg = decodeURIComponent(xmlhttp.responseText); setTimeout(function() { try { var t = eval(msg); } catch (e) { // If we're getting an error here, seeing the message will help in debugging console.log("JSCallback: Message from Server: " + msg); console.log("JSCallback Error: "+e); } }, 1); setTimeout(startXhr, 1); } // If callback ping (used to keep XHR request from timing out) else if (xmlhttp.status === 404) { setTimeout(startXhr, 10); } // 0 == Page is unloading. // 400 == Bad request. // 403 == invalid token. // 503 == server stopped. else { console.log("JSCallback Error: Request failed with status " + xmlhttp.status); exec.setNativeToJsBridgeMode(exec.nativeToJsModes.POLLING); } } };
if (xmlhttp.status === 200)
ãif (xmlhttp.status === 200 || xmlhttp.status === 0)
ããã³if (xmlhttp.status === 200 || xmlhttp.status === 0)
-å¹æã¯ãããŸããïŒ
ããã«ããã®ãšã©ãŒã1åšããŠã©ã®ããã«éããããã¯ããããŸããã äœãå©ãã«ãªããªãã®ã§ãç§ã¯çµ¶æããæºåãã§ããŠãããšããèšããŸããã ãšã«ãããã³ãŒãã®äžéšãã³ã¡ã³ãã¢ãŠãããããšã«ãããŸã§ãã¢ããªã±ãŒã·ã§ã³ã¯ã¯ã©ãã·ã¥ããŸããã ãããŠèŠãïŒ ãšã©ãŒãæ¶ããŸããïŒ ã³ãŒãã®äžéšãè¿ããšããšã©ãŒã®åå ãšãªã£ãã³ãŒãã®äžéšãèŠã€ãããŸããã
var Util = { SetNewHash: function(hash) { //location.href = 'http://'+location.host+location.pathname+'#'+hash; },
ããã·ã¥ã®å€æŽããã®ãããªãšã©ãŒã«ã€ãªãã£ãçç±ã¯ãç§ã«ã¯è¬ã®ãŸãŸã§ãã 誰ãããã®åé¡ã«ã€ããŠèããŠãããªã-ãŸãã
ã¹ããã8-å®è¡
é»è©±ã§ã¢ããªã±ãŒã·ã§ã³ãçŽæ¥èµ·åããã«ã¯ãèšå®ã«ç§»åããŠã[éçº]ã»ã¯ã·ã§ã³ãéžæãã[USBãããã°]ã®æšªã®ããã¯ã¹ããªã³ã«ããŸãã 次ã«ãEclipseã§RUNãæŒããšãç°å¢ã¯é»è©±æ©ãUSBã«æ¥ç¶ãããŠãããšå€æããŸãããããæ¢ã«å®è¡ããããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãéå§ããããšãæã¿ãŸãã