今天给大家写了一个简单的小dome android与js交互(一)我在这里说明一下 不是我的原创 我也是从网上找的 给大家演练一下,好了进入正题吧
首先我给大家看的是我从网上随便复制的一串html文件 首先这个文件是要放到你项目中main的文件夹中assets文件里(没有的话自己创建一个assets文件夹 切记:一定是要放到main文件下的assets文件夹中)
<html>
<head>
<meta charset="utf-8">
<title>Carson_Ho</title>
<!--// JS代码-->
<script>
<!--// Android需要调用的方法-->
function callJS(){
alert("Android调用了JS的callJS方法");
}
</script>
</head>
</html>
接下来我们就要写个布局了当咱们一听Android与H5交互立刻想到了Android中的控件WebView 接下来看一下我写的布局界面比较丑陋 只不过是方便测试
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwp.jsjiaohu.MainActivity"
android:background="#ffffff"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/mBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="调用js" />
<WebView
android:id="@+id/mWeb"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
</LinearLayout>
接下来布局写好后我们开始在java代码中完成我们想要的功能,直接看代码吧 该注意的地方我会用红色特别标注
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button mBtn;
private WebView mWeb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mBtn = (Button) findViewById(R.id.mBtn);
mWeb = (WebView) findViewById(R.id.mWeb);
mBtn.setOnClickListener(this);
WebSettings WebSettings = mWeb.getSettings();
WebSettings.setJavaScriptEnabled(true);// 设置与Js交互的权限
WebSettings.setJavaScriptCanOpenWindowsAutomatically(true);//设置允许弹出js弹窗
mWeb.loadUrl("file:///android_asset/javascript.html"); 先载入JS代码 格式规定为:file:///android_asset/文件名.html
}
@Override
public void onClick(View v) {
mWeb.post(new Runnable() { // 通过Handler发送消息
@Override
public void run() {
mWeb.loadUrl("javascript:callJS()");
// 注意调用的JS方法名要对应上
// 调用javascript的callJS()方法
}
});
// 由于设置了弹窗检验调用结果,所以需要支持js对话框
// webview只是载体,内容的渲染需要使用webviewChromClient类去实现
// 通过设置WebChromeClient对象处理JavaScript的对话框
//设置响应js 的Alert()函数
mWeb.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this);
b.setTitle("AlertDialog");
b.setMessage(message);
b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
});
b.setCancelable(false);
b.create().show();
return true;
}
});
}
}