随着嵌入式硬件平台的迅速发展,目前JS与WEBKIT的应用越来越广泛。目前在ANDROID平台,有幸可以尝试下这方面的应用开发。
webview的基本用法:
mWebView = (MyWebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true );
webSettings.setSupportZoom(true);
(其中MyWebView是自己的继承类)
//mWebView.loadUrl("file:///android_asset/default.htm" ); /*本地文件调试*/
mWebView.loadUrl("http://www.google.com/" );
注意访问internet时,AndroidManifest.xml需要增加一条设置属性:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.webview"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
webview的支持JS alert:
在用webview调试时,有时希望能执行JS里的alert 弹出框。便于直观的调试!需要设置下面的函数即可:
final Context myApp = this;
/* WebChromeClient must be set BEFORE calling loadUrl! */
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)
{
new AlertDialog.Builder(myApp)
.setTitle("javaScript dialog")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
result.confirm();
}
})
.setCancelable(false)
.create()
.show();
return true;
};
});
如果需要避免页面链接时不在新的页面打开,需要做下面的设置:
mWebView.setWebViewClient(new MyWebViewClient());
//避免链接时按新的页面打开
public class MyWebViewClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;
}
}
JS 调用Android 对象函数:
出了一些应用需要外,调试时JS里也可以调用ANDROID的对象函数打印一些LOG:
JS:
document.onkeydown = keyDown
function keyDown(event) {
window.alert("hello");
var key_code = event.keyCode;
alert(key_code);
ANDROID.debug("area="+area);
}
ANDROID:
mWebView.addJavascriptInterface(new Object() {
public int debug(final String log) {
mHandler.post(new Runnable() {
public void run() {
Log.d("JS call", log);
}
});
return 1;
}
}, "ANDROID" );
Android调用JS 对象函数:
HTML中JS的定义:
function fillContent(){
document.getElementById("content").innerHTML =
"This Content is showed by Android invoke Javascript function.";
}
ANDROID调用的写法:
//给button添加事件响应,执行JavaScript的fillContent()方法
mButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
mWebView.loadUrl("javascript:fillContent()");
}
});