android的web應用
Ⅰ android webview 有哪些軟體應用
轉載 本文主要對WebView進行介紹,包括webView 4個可以定製的點、設置WebView back鍵響應、控制網頁的鏈接仍在webView中跳轉、顯示頁面載入進度、處理https請求、利用addjavascriptInterface實現android程序和javascript交互等等
WebView基於webkit引擎展現web頁面的控制項,使用前需要在Android Manifest file中配置internet訪問許可權,否則提示頁面無法訪問
Xml代碼 [url=][/url]
<uses-permission
android:name="android.permission.INTERNET"
/>
WebView控制項功能強大,除了具有一般View的屬性和設置外,還可以對url請求、頁面載入、渲染、頁面交互進行強大的處理。
WebView有幾個可以定製的點:
(1)設置WebChromeClient子類,WebChromeClient會在一些影響瀏覽器ui交互動作發生時被調用,比如WebView關閉和隱藏、頁面載入進展、js確認框和警告框、js載入前、js操作超時、webView獲得焦點等等,詳見WebChromeClient
(2)設置WebViewClient子類,WebViewClient會在一些影響內容喧嚷的動作發生時被調用,比如表單的錯誤提交需要重新提交、頁面開始載入及載入完成、資源載入中、接收到http認證需要處理、頁面鍵盤響應、頁面中的url打開處理等等,詳見WebViewClient
(3)設置WebSettings類,其中包含多項配置。WebSettings用來對WebView的配置進行配置和管理,比如是否可以進行文件操作、緩存的設置、頁面是否支持放大和縮小、是否允許使用資料庫api、字體及文字編碼設置、是否允許js腳本運行、是否允許圖片自動載入、是否允許數據及密碼保存等等,詳見WebSettings
(4)設置addJavascriptInterface方法,將java對象綁定到webView中,以方便從頁面js中控制java對象,實現用本地java代碼和html頁面進行交互,甚至可以進行頁面自動化。但如此做存在安全隱患,所以若設置了此方法,請確保webView的代碼都是自己完成,詳細使用addJavascriptInterface進行自動化見本文5使用addJavascriptInterface完成和js交互
1、back鍵控制網頁後退
Activity默認的back鍵處理為結束當前Activity,webView查看了很多網頁後,希望按back鍵返回上一次瀏覽的頁面,這個時候我們就需要覆蓋onKeyDown函數,告訴他如何處理,如下:
Java代碼 [url=][/url]
public
boolean onKeyDown(int keyCode, KeyEvent event) {
if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
webView.goBack();
return
true;
}
return
super.onKeyDown(keyCode, event);
}
其中webView.canGoBack()在webView含有一個可後退的瀏覽記錄時返回true
webView.goBack();表示返回webView的上次訪問頁面
2、當前網頁的鏈接仍在webView中跳轉
Java代碼 [url=][/url]
webView.setWebViewClient(new WebViewClient() {
@Override
public
boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return
true;
}
});
shouldOverrideUrlLoading表示當前webView中的一個新url需要載入時,給當前應用程序一個處理機會,如果沒有重寫此函數,webView請求ActivityManage選擇合適的方式處理請求,就像彈出uc和互聯網讓用戶選擇瀏覽器一樣。重寫後return true表示讓當前程序處理,return false表示讓當前webView處理
Xml代碼 [url=][/url]
Give the host application a chance to take over the control when a new url is about to be loaded in the current WebView. If WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the url. If WebViewClient is provided, return true means the host application handles the url, while return false means the current WebView handles the url.
參考:
http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String)
問題分析:
今天在用webView load騰訊的OAuth頁面http://open.t.qq.com/cgi-bin/authorize
時,突然彈出選擇uc還是互聯網瀏覽器的確認框,很奇怪,其他頁面都能正常load,而這個卻無法在webView中load,後來用火狐看了下是因為load這個頁面的時候會重定向到另外一個頁面http://open.t.qq.com/oauth_html/login.php?oauth_token=xxx&type=0,而webView沒有設置shouldOverrideUrlLoading,導致url交給了ActivityManage去處理,解釋如上,後添加後可正常load頁面
3、頁面載入進度
代碼如下
Java代碼 [url=][/url]
webView.setWebChromeClient(new WebChromeClient() {
public
void onProgressChanged(WebView view, int progress) {
setTitle("頁面載入中,請稍候..." + progress + "%");
setProgress(progress * 100);
if (progress == 100) {
setTitle(R.string.app_name);
}
}
});
onProgressChanged通知應用程序當前頁面載入的進度
progress
表示當前頁面載入的進度,為1至100的整數
參考:
http://developer.android.com/reference/android/webkit/WebChromeClient.html#onProgressChanged(android.webkit.WebView, int)
4、處理https請求
webView默認是不處理https請求的,頁面顯示空白,需要進行如下設置:
Java代碼 [url=][/url]
webView.setWebViewClient(new WebViewClient() {
@Override
public
void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
// handler.cancel();
// handler.handleMessage(null);
}
});
onReceivedSslError為webView處理ssl證書設置
其中handler.proceed();表示等待證書響應
handler.cancel();表示掛起連接,為默認方式
handler.handleMessage(null);可做其他處理
參考:
http://developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError)
5、使用addJavascriptInterface完成和js交互
5.1 javascript中調用java對象及方法
設置webView的addJavascriptInterface方法,該方法有兩個參數,第一個參數為被綁定到js中的類實例,第二個參數為在js中暴露的類別名,在js中引用java對象就是用這個名字
Java代碼 [url=][/url]
ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");
實現綁定到js的類,其中的javaMethod方法我們將在頁面前端js中調用,用於返回一段內容。showHtml用來使用AlertDialog顯示一段html代碼,稍後將使用到
Java代碼 [url=][/url]
private
class ClassBeBindedToJS{
public
void showHtml(String html){
new AlertDialog.Builder(UpdateStatusActivity.this)
.setTitle("HTML").setMessage(html)
.setPositiveButton(android.R.string.ok, null)
.setCancelable(false).create().show();
}
public String javaMethod() {
return
"use java method";
}
};
如此我們就可以在前端調用java對象,如下:
Html代碼 [url=][/url]
<span><html>
<body>
<div
id="displayDiv">Test page.</div>
<input
type="button"
value="use java object"
onclick="document.getElementById('</span>displayDiv').innerHTML=classNameBeExposedInJs.javaMethod()"
/>
<span>
</body>
</html></span>
這段html作用為點擊button按鈕,改變div內容為java對象方法中的內容,其中classNameBeExposedInJs為java對象在js中的別名,javaMethod為java對象的方法
5.2 java中調用js方法
用webView的loadUrl實現,比如現在我們想在頁面載入完成後調用js中的hello函數,實現如下:
Java代碼 [url=][/url]
webView.setWebViewClient(new WebViewClient() {
@Override
public
void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:hello()");
}
});
怎麼樣,很簡單吧^_^,直接loadUrl("javascript:hello()")就可以了
利用這一點我們可以很方便的實現WebView的自動化,如網頁自動化登錄。舉個栗子,實現http://m.renren.com/ 的自動登錄啊,代碼如下
Java代碼 [url=][/url]
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://m.renren.com");
webView.requestFocus();
ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");
webView.setWebViewClient(new WebViewClient() {
@Override
public
void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:document.getElementsByName('email')[0].value='userName'");
webView.loadUrl("javascript:document.getElementsByName('password')[0].value='userPassword'");
webView.loadUrl("javascript:document.getElementsByName('login')[0].click()");
}
});
從中可以看出先載入http://m.renren.com頁面,在頁面載入完成onPageFinished後,調用js實現自動登錄
其中三句js分別表示設置用戶名文本框內容、設置用戶密碼文本框內容、點擊登錄按鈕,如此登錄成功嘍
5.3 java和js混用實現一些效果
5.3.1 WebView用AlertDialog顯示頁面的html代碼
之前5.1中的showHtml方法現在派上用場啦,在頁面載入完成後顯示頁面html內容,如下:
Java代碼 [url=][/url]
webView.setWebViewClient(new WebViewClient() {
@Override
public
void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:window.classNameBeExposedInJs.showHtml(document.getElementsByTagName('html')[0].innerHTML);");
}
});
其中webView.loadUrl表示調用頁面中的js,而頁面中的js window.classNameBeExposedInJs.showHtml調用了程序中的java對象的方法,方法參數為一段js。
首先webView會執行這一段js document.getElementsByTagName('html')[0].innerHTML。含義即為取得頁面中html標記的innerHTML,及網頁主要內容;
然後將得到的網頁內容當作字元串參數傳入showHtml方法
最後調用showHtml函數實現,即用AlertDialog顯示字元串,如此得到了整個網頁的大部分html代碼
5.3.2 WebView顯示當前頁面的url地址
獲得WebView當前頁面url使用webView.getUrl()即可,如下:
Java代碼 [url=][/url]
webView.loadUrl("javascript:window.classNameBeExposedInJs.showHtml('" + webView.getUrl() + "');");
Ⅱ 安卓系統webview 是什麼來的
WebView是用於展示網路請求後的結果,也就是將url網路請求的結果展示在裡面。
WebView是一個基於webkit引擎、展現web頁面的控制項。Android的Webview在低版本和高版本採用了不同的webkit版本內核,Android4.4後直接使用了Chrome。
WebView的作用:
1.顯示和渲染Web頁面;
2.直接使用html文件(網路上或本地assets中)作布局;
3.可和JavaScript交互調用。
(2)android的web應用擴展閱讀:
WebView控制項功能強大,除了具有一般View的屬性和設置外,還可以對url請求、頁面載入、渲染、頁面交互進行強大的處理。一般來說Webview可單獨使用,也可聯合其工具類一起使用。
移動應用的主體是WebView,主要以網頁語言編寫,穿插Native功能的Hybrid App開發類型。激活WebView為活躍狀態,能正常執行網頁的響應。
當WebView的頁面被失去焦點被切換到後台不可見狀態,需要執行onPause。通過onPause動作通知內核暫停所有的動作,比如DOM的解析、plugin的執行、JavaScript執行。
參考資料來源:網路—hybrid app
Ⅲ 如何利用安卓手機搭建WEB伺服器
1.安裝手機本地php+mysql伺服器環境篇 :
1.1安裝ksweb軟體,安裝好ksweb後,會在手機上生成一個文件夾htdocs,其目錄是mnt/sdcard/htdocs,htdocs是網站的根目錄。
1.2安裝mysql 直接點擊mysql管理,點擊選擇「是」然後解壓便可自動安裝。mysql的賬號密碼隨後再改(在設置裡面更改)。
1.3安裝好MySQL之後,(如下圖,打開phpmyadmin,表示安裝成功!),另外,我們需要對ksweb進行一些設置方可更好使用。
1.3.1埠的更改步驟:(啟用root→更改80埠)手機伺服器啟用root方法如下圖,在ksweb設置裡面把root打鉤。
1.3.2開啟手機80埠方法:把8080埠改為80埠,並把PHP服務,MySQL都打勾。其他一些設置比如MySQL密碼,開機自啟動等選項大家根據需要自行修改即可!
1.4ksweb全部設置好後,我們打開手機本地伺服器地址localhost:80,表示設置好了。
我們點擊頁面中的「Enter KSWEB Web Interface」可以看到手機伺服器的一些配置信息(默認賬號密碼都是「admin」)。表示手機服務搭建成功,一切正常!
2.利用nat123軟體進行內網80埠映射篇:
2.1注冊賬號,我們先到其官網注冊賬號官網,大家網路nat123即可,至於怎麼注冊我就不說了。
2.2登陸並添加域名解析,
2.2.1 應用名稱,我填的是網路電視直播—在線看電視。假如你要搭建自己的博客,你可以填XX的博客,或者XX的個人博客等。
2.2.2 內網埠,只有root的手機才填80埠,所以這也是為什麼一開始我說手機需要root!
2.2.3 內網地址這個默認localhost就行。
2.2.4 外網域名,我這里使用的是自己的域名(當使用自己的域名時,用cname解析,下面有當前唯一cname地址,我們在自己的域名解析裡面填這個就行)。如果我們沒有自己的域名,我們可以用官方免費的二級域名,注意他的格式)一切填好之後,點擊確認保存即可!
2.3 我們下載並安裝登陸安卓版的nat123,就自動解析了,
3.4 接下來我們在另一台電腦上輸入剛才的域名訪問 如下圖所示,表示安卓手機web伺服器安裝成功,網站搭建成功!
Ⅳ Android系統 WebView是什麼有什麼用
現在越來越多的APP都內置了Web網頁去載入視圖,也就是我們常說的Hybrid APP混合應用,市場上很多平台都是這樣做的,比如我們經常使用的淘寶、京東等電商平台。這些是如何實現的呢?在我們Android中有一個WebView組件,它就可以實現此類功能。它是Android中的原生UI控制項,主要用於在APP應用中方便地訪問遠程網頁或本地HTML資源,同時WebView也在Android中充當Java代碼和JS代碼之間交互的橋梁,實際上也可以將WebView看做一個功能最小化的瀏覽器。下面我們一起來看看WebView的一些常用的使用方法。
WebView是Android系統提供的一個能顯示網頁的系統控制項,它是一個特殊的View,同時也是一個ViewGroup,可以有很多其他子View。在Android 4.4以下(不包含4.4)系統WebView底層實現是採用WebKit內核,而在Android 4.4及其以上Google採用了Chromium內核作為系統WebView的底層內核支持。在這一變化中Android提供的WebView相關API並沒有發生較大變化,在4.4上也兼容低版本的API並且引進了少部分API。這里簡單介紹下基於Chromium的WebView和基於WebKit的WebView之間的差異,基於Chromium的Webview提供了更廣的HTML5、CSS3、JavaScript支持,在Android系統版本5.0上基於Chromium 37,WebView提供了絕大多數的HTML5特性支持,除此之外Chromium也支持遠程調試(Chrome DevTools)。WebKit JavaScript引起採用WebCore JavaScript在Android 4.4上換成了V8能直接提升JavaScript性能。
二、作用
1、顯示和渲染Web頁面
2、使用html文件(網路上或本地assets中)作為布局
3、可與JavaScript交互調用
註: WebView控制項功能強大,除了具有一般View的屬性和設置外,還可以對Url請求、頁面載入、渲染、頁面交互進行強大的處理。