app端的设置
- app端加载h5页面
a.myWebView.loadUrl("http://www.baidu.com")
b.myWebView.loadUrl("file://android_asset/index.html")
c.String htmlString = '<h1>这是html片段</h1>
myWebview.loadData(htmlString,"text/html","utf-8");
2.app端设置webview权限
a.设置能调用js
java
WebSettings webSettings = myWebview.getSetting();
webSettings.setJavaScriptEnabled(true)
b.暂时只用到了alert,设置
webview.setWebChromeClient(new WebChromeClient());
3.书写js端要调用的实例方法
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSHook(), "hello"); //在JSHook类里实现javascript想调用的方法,并将其实例化传入webview, "hello"这个字串告诉javascript调用哪个实例的方法
public void javaMethod(String p){
Log.d(tag , "JSHook.JavaMethod() called! + "+p);
}
@JavascriptInterface
public void showAndroid(){
String info = "来自手机内的内容!!!";
webView.loadUrl("javascript:show('"+info+"')");
}
@JavascriptInterface
public String getInfo(){
return "获取手机内的信息!!";
}
}
```
## html端代码 ##
调用Android组件测试
测试
启动hello world Activity
显示android内容
暂无记录
“`
package com.example.jscallandroid;
import android.support.v7.app.ActionBarActivity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends ActionBarActivity {
//private static final String URL = "http://shouji.baidu.com/";
private static final String URL = "file:///android_asset/helloworld.html";
private WebView webView;
public String tag = "MainActivity";
private Context mContext;
@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
// 进行全屏
mContext = this;
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
webView = (WebView) this.findViewById(R.id.wv);
webView.loadUrl(URL);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSHook(), "hello");
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d(tag, " url:"+url);
view.loadUrl(url);// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
return true;
}
});
}
public class JSHook{
@JavascriptInterface
public void javaMethod(String p){
Log.d(tag , "JSHook.JavaMethod() called! + "+p);
}
@JavascriptInterface
public void showAndroid(){
final String info = "来自手机内的内容!!!";
MainActivity.this.runOnUiThread(new Runnable(){
@Override
public void run() {
webView.loadUrl("javascript:show('"+info+"')");
}
});
}
public String getInfo(){
return "获取手机内的信息!!";
}
}
@Override
//设置回退
//覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack(); //goBack()表示返回WebView的上一页面
this.finish();
return true;
}
return false; }
}
参考http://www.cnblogs.com/lovemo1314/p/4634895.html