今天给大家写了一个简单的小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; } }); } }