phoneGapでお気に入りのサイトのクライアントを作成します

ウェブサイトが存在することもありますが、携帯電話からそれを使用することはあまり便利ではないため、別のアプリケーションを用意しておくといいでしょう。 Web開発のファンは、phoneGapを使用してこれを簡単に行うことができます。 ネコの下で、私がよく使用するメール追跡サービスと、基本的な機能を備えたデモクライアントについて説明します:承認、トラックのリストと説明の取得、新しいトラックを追加する機能。 私はこれについて開発者に連絡しませんでしたし、and慢さ、JavaScriptコードの掘り起こし、およびアプリケーションに広告が表示されないという事実について、彼が私に腹を立てないことを本当に願っています。 また、コードの松葉杖とサイクリングはご容赦ください。例として取り上げてください。



この記事は、あなた自身がサイトがどのように機能するかを把握でき、その情報がアプリケーションに表示されることを暗示しています。

いくつかのサイトを通じて承認に関する最後の記事を読んだ人は、phoneGapにはAppBrowserに素晴らしいものがあることを知っています。これは、アプリケーション内にサイトを開くだけでなく、JavaScriptコードを埋め込み、スタイルを変更できるため、承認フォームに役立ちます。

それに基づいて、承認のイメージと似姿で、次のコードがハブに書き込まれました。

var plugin_www_post_tracker_ru = { wwwref: false, authOk: false, auth: function (force) { if (!window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID") || force) { //        var authURL="http://post-tracker.ru/login.php"; this.wwwref = window.open(encodeURI(authURL), '_blank', 'location=no'); //     this.wwwref.addEventListener('loadstop', this.auth_jsinjection); //        } else { plugin_www_post_tracker_ru.authOk=true; } }, auth_event_url: function (url) { var tmp=url_parser.get_args_cookie(url); //     if (tmp['PHPSESSID'] && tmp['userid'] && tmp['securehash']) { //     ,    plugin_www_post_tracker_ru.wwwref.close(); //       window.localStorage.setItem("plugin_www_post_tracker_ru_PHPSESSID", tmp['PHPSESSID']); window.localStorage.setItem("plugin_www_post_tracker_ru_userid", tmp['userid']); window.localStorage.setItem("plugin_www_post_tracker_ru_securehash", tmp['securehash']); plugin_www_post_tracker_ru.authOk=true;      } }, auth_cssinjection: function(){ plugin_www_post_tracker_ru.wwwref.insertCSS({code:".topline {display:none} .top {display:none} .logo {display:none} .menu {display:none} .counters {display:none} .bottom {display:none} .links {display:none} @-viewport {width: device-width; zoom: 1;"},function(){}); }, auth_jsinjection: function () { plugin_www_post_tracker_ru.auth_cssinjection(); //  CSS    ,     plugin_www_post_tracker_ru.wwwref.executeScript({ // JS     code: "document.cookie;" }, function(arg) { plugin_www_post_tracker_ru.auth_event_url(arg); }); } }
      
      







コンテンツを取得するには、POSTおよびGETリクエストを作成できる小さなAJAXライブラリを使用します。これにより、Cookieを挿入し、結果をコールバック関数に返すことができます(ベースはminiajaxから取得されます )。

アヤックス
 var ajax = { init: function(){ return new XMLHttpRequest(); }, send: function(url,method,args,cookies,async,_callback){ var q=ajax.init(); q.open(method,url,async); q.onreadystatechange=function(){ if(this.readyState==4 && this.status==200) { _callback(this.responseText); } }; if (cookies) { q.setRequestHeader('Cookie',cookies); } if(method=='POST') { q.setRequestHeader('Content-type','application/x-www-form-urlencoded'); q.send(args); } else { q.send(null); } } }
      
      





コンテンツを取得するには、post-tracker.ru / my /ページにGETリクエストを同時に送信します。ブロックの1つで応答が返された場合、







、明らかにログアウトされ、手順を再度実行する必要があります。

  get_content: function (async) { //        var cookies="PHPSESSID="+window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID")+"; userid="+window.localStorage.getItem("plugin_www_post_tracker_ru_userid")+"; securehash="+window.localStorage.getItem("plugin_www_post_tracker_ru_securehash"); //  cookie plugin_www_post_tracker_ru.dataReady=false; ajax.send("http://post-tracker.ru/my/",'GET',null,cookies,async,this._parse_content); //  ajax        }, _parse_content: function (data) { var wrapper=document.createElement('div'); //  html   ,      wrapper.innerHTML=data; plugin_www_post_tracker_ru._get_inside_data(wrapper,'trackcode,date,status,comment'); //        ,   ,     }, _get_inside_data: function (wrapper,types) { var tmp=wrapper.getElementsByClassName('login')[0].innerHTML; //      div  login if (tmp=='<a href="/login.php"></a>  <a href="/register.php"></a>') { //   ,    plugin_www_post_tracker_ru.auth(true); } else { //    plugin_www_post_tracker_ru.default_folder=wrapper.getElementsByTagName('input')[0].value; //  ID    ,           var types=types.split(","); for (var typeid in types) { //  html-      var tmp=wrapper.getElementsByClassName(types[typeid]); var id=0; for (var i in tmp) { if (tmp[i].innerHTML) { if (!plugin_www_post_tracker_ru.postdata[id]) plugin_www_post_tracker_ru.postdata[id]=new Array(); plugin_www_post_tracker_ru.postdata[id][(types[typeid])]=tmp[i].innerHTML.replace(/(\r\n|\n|\r)/gm,"").replace(/<\/?[^>]+>/gmi,"").replace(/^\s+|\s+$/gm,""); //       , html       id++; } } } plugin_www_post_tracker_ru.dataReady=true; show_list(); //       } }, get_list: function () { //     show_list()  ""  var tmp=new Array(); for (var i in plugin_www_post_tracker_ru.postdata) { tmp[i]="<b>"+plugin_www_post_tracker_ru.postdata[i]['trackcode']+"</b> "+plugin_www_post_tracker_ru.postdata[i]['comment']+"<br/>"+plugin_www_post_tracker_ru.postdata[i]['date']+" "+plugin_www_post_tracker_ru.postdata[i]['status']; } return tmp; }
      
      



window.localStorage.getItem( "plugin_www_post_tracker_ru_PHPSESSID")+ ";ユーザーID =" + window.localStorage.getItem( "plugin_www_post_tracker_ru_userid")+ "; securehash =" + window.localStorage.getItem(「plugin_www_post_tracker_ru_securehash get_content: function (async) { // var cookies="PHPSESSID="+window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID")+"; userid="+window.localStorage.getItem("plugin_www_post_tracker_ru_userid")+"; securehash="+window.localStorage.getItem("plugin_www_post_tracker_ru_securehash"); // cookie plugin_www_post_tracker_ru.dataReady=false; ajax.send("http://post-tracker.ru/my/",'GET',null,cookies,async,this._parse_content); // ajax }, _parse_content: function (data) { var wrapper=document.createElement('div'); // html , wrapper.innerHTML=data; plugin_www_post_tracker_ru._get_inside_data(wrapper,'trackcode,date,status,comment'); // , , }, _get_inside_data: function (wrapper,types) { var tmp=wrapper.getElementsByClassName('login')[0].innerHTML; // div login if (tmp=='<a href="/login.php"></a> <a href="/register.php"></a>') { // , plugin_www_post_tracker_ru.auth(true); } else { // plugin_www_post_tracker_ru.default_folder=wrapper.getElementsByTagName('input')[0].value; // ID , var types=types.split(","); for (var typeid in types) { // html- var tmp=wrapper.getElementsByClassName(types[typeid]); var id=0; for (var i in tmp) { if (tmp[i].innerHTML) { if (!plugin_www_post_tracker_ru.postdata[id]) plugin_www_post_tracker_ru.postdata[id]=new Array(); plugin_www_post_tracker_ru.postdata[id][(types[typeid])]=tmp[i].innerHTML.replace(/(\r\n|\n|\r)/gm,"").replace(/<\/?[^>]+>/gmi,"").replace(/^\s+|\s+$/gm,""); // , html id++; } } } plugin_www_post_tracker_ru.dataReady=true; show_list(); // } }, get_list: function () { // show_list() "" var tmp=new Array(); for (var i in plugin_www_post_tracker_ru.postdata) { tmp[i]="<b>"+plugin_www_post_tracker_ru.postdata[i]['trackcode']+"</b> "+plugin_www_post_tracker_ru.postdata[i]['comment']+"<br/>"+plugin_www_post_tracker_ru.postdata[i]['date']+" "+plugin_www_post_tracker_ru.postdata[i]['status']; } return tmp; }







このコードのshow_list()



は、スクローラーを使用してdiv内に準備されたhtmlのブロックを追加します(ところで、 Overthrowをお勧めします。作業速度がひどいため、 iscroll-4をお勧めしません)。



トラッキング用の新しいコードを送信する機能を追加するときが来ましたが、最初にAndroidスマートフォンのMENUボタンにアクションを追加します。 これは、 menubuttonイベントを使用して行われます。 これに「トラックコードを追加」ボタンを使用してブロックの外観をアタッチします。ボタンを押すと、プロセスが開始されます。

  put_trackCode: function(){ //         "  " var trackCode = prompt("  "); //      if (trackCode) { this._put_trackCode_getPath(trackCode); //        (    ),        if (plugin_www_post_tracker_ru.default_path) { //   ,   var comment = prompt(""); if (comment) { this._put_trackCode(trackCode,comment); //       } } else { alert("   "); } } else { menuButtonHide(); //     ,        } }, _put_trackCode_getPath: function (trackCode) { //   var cookies="PHPSESSID="+window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID")+"; userid="+window.localStorage.getItem("plugin_www_post_tracker_ru_userid")+"; securehash="+window.localStorage.getItem("plugin_www_post_tracker_ru_securehash"); var data="act=getPathForm&trackcode="+encodeURIComponent(trackCode); ajax.send("http://post-tracker.ru/ajax/userTrackcodes.php",'POST',data,cookies,false,this._put_trackCode_getPath_result); }, _put_trackCode_getPath_result: function (data){ var wrapper=document.createElement('div'); //  ,   html wrapper.innerHTML=data; var tmp=wrapper.getElementsByTagName('input'); //      input if (tmp.length>0) { plugin_www_post_tracker_ru.default_path=tmp[0].value; //  ,        }else{ plugin_www_post_tracker_ru.default_path=false; } }, _put_trackCode: function (trackCode,comment){ //       ,    var cookies="PHPSESSID="+window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID")+"; userid="+window.localStorage.getItem("plugin_www_post_tracker_ru_userid")+"; securehash="+window.localStorage.getItem("plugin_www_post_tracker_ru_securehash"); var data="act=addTrackcodeAction&folderid="+plugin_www_post_tracker_ru.default_folder+"&trackcode="+encodeURIComponent(trackCode)+"&path="+plugin_www_post_tracker_ru.default_path+"&comment="+encodeURIComponent(comment); ajax.send("http://post-tracker.ru/ajax/userTrackcodes.php",'POST',data,cookies,false,this._put_trackCode_result); }, _put_trackCode_result: function(data){ //   menuButtonHide(); //   plugin_www_post_tracker_ru.get_content(true); //         }
      
      



window.localStorage.getItem( "plugin_www_post_tracker_ru_PHPSESSID")+ ";ユーザーID =" + window.localStorage.getItem( "plugin_www_post_tracker_ru_userid")+ "; securehash =" + window.localStorage.getItem(「plugin_www_post_tracker_ru_securehash put_trackCode: function(){ // " " var trackCode = prompt(" "); // if (trackCode) { this._put_trackCode_getPath(trackCode); // ( ), if (plugin_www_post_tracker_ru.default_path) { // , var comment = prompt(""); if (comment) { this._put_trackCode(trackCode,comment); // } } else { alert(" "); } } else { menuButtonHide(); // , } }, _put_trackCode_getPath: function (trackCode) { // var cookies="PHPSESSID="+window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID")+"; userid="+window.localStorage.getItem("plugin_www_post_tracker_ru_userid")+"; securehash="+window.localStorage.getItem("plugin_www_post_tracker_ru_securehash"); var data="act=getPathForm&trackcode="+encodeURIComponent(trackCode); ajax.send("http://post-tracker.ru/ajax/userTrackcodes.php",'POST',data,cookies,false,this._put_trackCode_getPath_result); }, _put_trackCode_getPath_result: function (data){ var wrapper=document.createElement('div'); // , html wrapper.innerHTML=data; var tmp=wrapper.getElementsByTagName('input'); // input if (tmp.length>0) { plugin_www_post_tracker_ru.default_path=tmp[0].value; // , }else{ plugin_www_post_tracker_ru.default_path=false; } }, _put_trackCode: function (trackCode,comment){ // , var cookies="PHPSESSID="+window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID")+"; userid="+window.localStorage.getItem("plugin_www_post_tracker_ru_userid")+"; securehash="+window.localStorage.getItem("plugin_www_post_tracker_ru_securehash"); var data="act=addTrackcodeAction&folderid="+plugin_www_post_tracker_ru.default_folder+"&trackcode="+encodeURIComponent(trackCode)+"&path="+plugin_www_post_tracker_ru.default_path+"&comment="+encodeURIComponent(comment); ajax.send("http://post-tracker.ru/ajax/userTrackcodes.php",'POST',data,cookies,false,this._put_trackCode_result); }, _put_trackCode_result: function(data){ // menuButtonHide(); // plugin_www_post_tracker_ru.get_content(true); // }



window.localStorage.getItem( "plugin_www_post_tracker_ru_PHPSESSID")+ ";ユーザーID =" + window.localStorage.getItem( "plugin_www_post_tracker_ru_userid")+ "; securehash =" + window.localStorage.getItem(「plugin_www_post_tracker_ru_securehash put_trackCode: function(){ // " " var trackCode = prompt(" "); // if (trackCode) { this._put_trackCode_getPath(trackCode); // ( ), if (plugin_www_post_tracker_ru.default_path) { // , var comment = prompt(""); if (comment) { this._put_trackCode(trackCode,comment); // } } else { alert(" "); } } else { menuButtonHide(); // , } }, _put_trackCode_getPath: function (trackCode) { // var cookies="PHPSESSID="+window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID")+"; userid="+window.localStorage.getItem("plugin_www_post_tracker_ru_userid")+"; securehash="+window.localStorage.getItem("plugin_www_post_tracker_ru_securehash"); var data="act=getPathForm&trackcode="+encodeURIComponent(trackCode); ajax.send("http://post-tracker.ru/ajax/userTrackcodes.php",'POST',data,cookies,false,this._put_trackCode_getPath_result); }, _put_trackCode_getPath_result: function (data){ var wrapper=document.createElement('div'); // , html wrapper.innerHTML=data; var tmp=wrapper.getElementsByTagName('input'); // input if (tmp.length>0) { plugin_www_post_tracker_ru.default_path=tmp[0].value; // , }else{ plugin_www_post_tracker_ru.default_path=false; } }, _put_trackCode: function (trackCode,comment){ // , var cookies="PHPSESSID="+window.localStorage.getItem("plugin_www_post_tracker_ru_PHPSESSID")+"; userid="+window.localStorage.getItem("plugin_www_post_tracker_ru_userid")+"; securehash="+window.localStorage.getItem("plugin_www_post_tracker_ru_securehash"); var data="act=addTrackcodeAction&folderid="+plugin_www_post_tracker_ru.default_folder+"&trackcode="+encodeURIComponent(trackCode)+"&path="+plugin_www_post_tracker_ru.default_path+"&comment="+encodeURIComponent(comment); ajax.send("http://post-tracker.ru/ajax/userTrackcodes.php",'POST',data,cookies,false,this._put_trackCode_result); }, _put_trackCode_result: function(data){ // menuButtonHide(); // plugin_www_post_tracker_ru.get_content(true); // }







phoneGapでトレーニングするためにアプリケーションに他に何を追加できますか? まず第一に、 ローカライズは傷つきません。そのため、テキストはコードに保存されず、異なる国ではロシア語のみが表示されません。 また、インターネット接続を失ったり、「戻る」ボタンをクリックしたりするなど、 一部の状態を解決するのに問題はありません。

追跡サービス自体に関しては、リソースが含まれる広告を追加するだけでなく、フォルダー作成、 通知による自動チェック、 ホイッスルホップ サウンドエフェクトを追加して機能を強化する価値があります。



プロジェクトのソースコードと、関係者のテストおよび実験用にコンパイルされたアプリケーション 。 また、鈍いフォーク用のgithub github.com/SovGVD/PhoneGap-post-tracker.ru



All Articles