使用C#开发Android应用之WebApp
<div id="cnblogs_post_body" class="blogpost-body "><p>近段时间了解了一下VS2017开发安卓应用的一些技术,特地把C#开发WebApp的一些过程记录下来,</p>
<p>欢迎大家一起指教、讨论,废话少说,是时候开始表演真正的技术了。。</p>
<p> </p>
<h2>1、<span style="font-family: 宋体">新建空白</span>Android<span style="font-family: 宋体">应用</span></h2>
<p><span style="font-family: 宋体"><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406001510621-234911147.png" alt=""></span></p>
<h2>2、<span style="font-family: 宋体">拖一个</span>WebView<span style="font-family: 宋体">控件进来</span></h2>
<p><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406001537980-1578776813.png" alt=""> <img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406001744561-908725660.png" alt=""></p>
<h2>3、<span style="font-family: 新宋体">打开模拟器</span>Genymotion,选择一个系统版本,启动</h2>
<p> <img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406001603743-475324980.png" alt=""></p>
<p><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406001614401-310343237.png" alt=""></p>
<h2>4、加载网页</h2>
<p>4.1 <span style="font-family: 宋体">打开</span>MainActivity.cs,在OnCreate方法里添加2行代码</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> OnCreate(Bundle savedInstanceState)
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">base</span><span style="color: rgba(0, 0, 0, 1)">.OnCreate(savedInstanceState);
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Set our view from the "main" layout resource</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)"> SetContentView(Resource.Layout.Main);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(255, 0, 0, 1)">var web = FindViewById<WebView>(Resource.Id.webView1);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(255, 0, 0, 1)">web.LoadUrl("http://www.baidu.com");
</span><span style="color: rgba(0, 128, 128, 1)">10</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>加载网页就是这样简单,F5调试,就可以看到模拟器有了变化,打开了我们的应用,并如期加载了网页</p>
<p> <img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406002007367-369859519.png" alt=""></p>
<h2>5、<span style="font-family: 新宋体">网页端调用手机</span>APP后台方法</h2>
<p>5.1 <span style="font-family: 新宋体">打开</span>MainActivity.cs,重写OnCreate为如下</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> OnCreate(Bundle savedInstanceState)
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">base</span><span style="color: rgba(0, 0, 0, 1)">.OnCreate(savedInstanceState);
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">var</span> webView = <span style="color: rgba(0, 0, 255, 1)">new</span> WebView(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)"> SetContentView(webView);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> webView.Settings.JavaScriptEnabled = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(255, 0, 0, 1)">webView.AddJavascriptInterface(new CustomJSInterface(this), "CSharp");
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(255, 0, 0, 1)">webView.LoadUrl("http://192.168.0.113:8080/");
</span><span style="color: rgba(0, 128, 128, 1)">11</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>标红的是实现前端调用后台方法的关键,新建CustomJSInterface.cs</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> CustomJSInterface : Java.Lang.Object
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)"> Context context;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> CustomJSInterface(Context context)
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.context =<span style="color: rgba(0, 0, 0, 1)"> context;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> ShowToast(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> message)
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)"> Toast.MakeText(context, message, ToastLength.Short).Show();
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">16</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>而"http://192.168.0.113:8080/"是我们的Web站点,大部分业务逻辑在网站里处理,WebApp只是在外表包了一个壳</p>
<p>5.2 <span style="font-family: 新宋体">我们再新建一个本地</span>Web站点</p>
<p><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406002642989-1822099308.png" alt=""></p>
<p><span style="font-family: 新宋体">改动首页</span>HTML,主要功能是点击按钮,会调用后台ShowToast,这是个提示功能</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 0, 1)">@{
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 0, 1)"> ViewBag.Title = "Home Page";
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">br </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="jumbotron"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="button"</span><span style="color: rgba(255, 0, 0, 1)"> onClick</span><span style="color: rgba(0, 0, 255, 1)">="CSharp.ShowToast('hello')"</span><span style="color: rgba(0, 0, 255, 1)">></span>由前端调用C#后台方法<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>浏览器预览</p>
<p><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406002735024-1374743389.png" alt=""></p>
<p> </p>
<p>5.3 VS2017按F5<span style="font-family: 宋体">部署,可以看的模拟器也正常把本地站点加载进来了</span></p>
<p><span style="font-family: 宋体"><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406002823858-660515670.png" alt=""></span></p>
<p>点击"获取前端JS返回的数据"</p>
<p><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406002913691-1749342146.png" alt=""></p>
<h2>6、APP<span style="font-family: 宋体">执行前端</span><span style="font-family: Calibri">JS</span><span style="font-family: 宋体">方法</span></h2>
<p><span style="font-family: 宋体">6.1 </span>重写OnCreate</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 必须重写WebView客户端</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span> webView.SetWebViewClient(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> CustomWebViewClient());
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 先打开首页</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> webView.LoadUrl(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://192.168.0.113:8080/</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> APP主动获取前端数据</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">var</span> btn = FindViewById<Button><span style="color: rgba(0, 0, 0, 1)">(Resource.Id.button1);
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> btn.Click += <span style="color: rgba(0, 0, 255, 1)">delegate</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">var</span> callback = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ReceiveValueCallback();
</span><span style="color: rgba(0, 128, 128, 1)">11</span> callback.OnReceiveValueCallback += (message) =>
<span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">13</span> Toast.MakeText(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.ApplicationContext, message, ToastLength.Short).Show();
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)"> };
</span><span style="color: rgba(0, 128, 128, 1)">15</span>
<span style="color: rgba(0, 128, 128, 1)">16</span> webView.EvaluateJavascript(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">GetData()</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, callback);
</span><span style="color: rgba(0, 128, 128, 1)">17</span> };</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>6.2 <span style="font-family: 宋体">新建</span>CustomWebViewClient.cs</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> CustomWebViewClient : WebViewClient
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">override</span> <span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> ShouldOverrideUrlLoading(WebView view, String url)
</span><span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 0, 1)"> view.LoadUrl(url);
</span><span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">8</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>6.3 新建ReceiveValueCallback.cs,这个类主要负责处理前端返回的数据</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ReceiveValueCallback : Java.Lang.Object, IValueCallback
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">delegate</span> <span style="color: rgba(0, 0, 255, 1)">void</span> OnReceiveValueCallbackHandler(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> message);
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)"> OnReceiveValueCallbackHandler OnReceiveValueCallback;
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 重写ReceiveValue方法</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> OnReceiveValue(Java.Lang.Object value)
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)"> OnReceiveValueCallback(value.ToString());
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">11</span> }</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>6.4 <span style="font-family: 宋体">修改</span>Index.html</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 0, 1)">@{
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)"> ViewBag.Title = "Home Page";
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">br </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="jumbotron"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="button"</span><span style="color: rgba(255, 0, 0, 1)"> onClick</span><span style="color: rgba(0, 0, 255, 1)">="CSharp.ShowToast('hello')"</span><span style="color: rgba(0, 0, 255, 1)">></span>由前端调用C#后台方法<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">script </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="text/javascript"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">function</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> GetData() {
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">return</span> <span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">"</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">123456789</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">"</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> }
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="//common.cnblogs.com/images/copycode.gif" alt="复制代码"></span></div>
</div>
<p>6.5 VS2017按F5部署</p>
<p><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406003354610-205508335.png" alt=""></p>
<p>6.6 点击按钮"<span style="font-family: 新宋体">获取前端</span>JS返回的数据"</p>
<p><img src="https://images2018.cnblogs.com/blog/254672/201804/254672-20180406003414163-816085903.png" alt=""></p>
<p> </p>
<h2> 7、WebAPP使用疑问</h2>
<p> 7.1 <span style="font-family: 宋体">细心的人可能注意到:前端代码完全可以自己处理完业务,那还有Web</span>App<span style="font-family: 宋体">什么事情呢?这时的</span><span style="font-family: Calibri">APP</span><span style="font-family: 宋体">完全就跟一个浏览器差不多!</span></p>
<p>7.2 <span style="font-family: 宋体">确实是这样的</span>WebApp<span style="font-family: 宋体">相对与其他安卓</span><span style="font-family: Calibri">APP</span><span style="font-family: 宋体">来说,是轻量级的,只是一个壳子,但是他也是有其合适的使用范围;</span></p>
<p><span style="font-family: 宋体">比如:如果前端并没有数据持久化功能(如纯</span><span style="font-family: Calibri">JS</span><span style="font-family: 宋体">前端),这时要保存数据只能调用其他的</span><span style="font-family: Calibri">WebApi</span><span style="font-family: 宋体">,而由于</span><span style="font-family: Calibri">JS</span><span style="font-family: 宋体">的特性可能会引起一些安全问题。</span></p>
<p><span style="font-family: 宋体">或者根本没有第三方</span><span style="font-family: Calibri">API</span><span style="font-family: 宋体">,数据需要保存在手机端,</span><span style="font-family: Calibri">JS</span><span style="font-family: 宋体">也没有这种权限。</span></p>
<p><span style="font-family: 宋体">所以既兼顾了像升级</span><span style="font-family: Calibri">Web</span><span style="font-family: 宋体">站点那样简便,又有一些手机端的操作权限,</span><span style="font-family: Calibri">WebApp</span><span style="font-family: 宋体">应运而生。</span></p>
<p> </p>
</div>
<p> </p>
<p>出处:https://www.cnblogs.com/lanxiaoke/p/8725370.html</p>
</div>
<div id="MySignature" role="contentinfo">
<div class="div_masklayer" id="div_masklayer"></div>
<div class="div_popup" id="Div_popup">
<div style="float:left;width:50%">
<img class="img_zfb" id="img_zfb" src="https://images.cnblogs.com/cnblogs_com/mq0036/508398/o_12.png" />
</div>
<div style="float:left;width:50%">
<img class="img_zfb" id="img_zfb" src="https://images.cnblogs.com/cnblogs_com/mq0036/508398/o_200921131119o_12.png">
</div>
<p class="mid">您的资助是我最大的动力!<br>金额随意,欢迎来赏!<br>
<span style="color: #f9f">付</span>款后有任何问题请给我留言。</p>
</div>
<div class="autograph">
<p> <span style="display: none"> 如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【<strong>推荐</strong>】按钮。<br>
</span> 如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【<strong>关注我</strong>】。(●'◡'●)</p>
<p>因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【<strong>Jack_孟</strong>】!</p>
<div class="blogds">
<b style="color:#f00;font-size: 22px">如果对你有所帮助,赞助一杯咖啡!打</b>
<b style="color: #f00; font-size: 22px">付款后有任何问题请给我留言!!!</b>
</div>
<p>本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/11722524.html</p>
<p>【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!</p>
</div><br><br>
来源:https://www.cnblogs.com/mq0036/p/11722524.html
頁:
[1]