android 与js的简单交互
本篇文章介绍的内容是关于android 与js的简单交互的代码,现在分享给大家,有需要的朋友参考一下
权限:
MainActicity:
import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; /** * 注意事项:如何避免WebView内存泄露? * 不在xml中定义 Webview ,而是在需要的时候在Activity中创建,并且Context使用 getApplicationgContext() * <p> * 在 Activity 销毁( WebView )的时候, * 先让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空 */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { private WebView web; private Button but; private Button but2; private WebSettings settings; private Button but3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); but = findViewById(R.id.but); but2 = findViewById(R.id.but2); but3 = findViewById(R.id.but3); web = findViewById(R.id.web); but.setOnClickListener(this); but2.setOnClickListener(this); but3.setOnClickListener(this); //声明WebSettings子类 settings = web.getSettings(); //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript settings.setJavaScriptEnabled(true); //设置自适应屏幕,两者合用 settings.setUseWideViewPort(true); //将图片调整到适合webview的大小 settings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小 // 设置与Js交互的权限 settings.setJavaScriptEnabled(true); // 设置允许JS弹窗 settings.setJavaScriptCanOpenWindowsAutomatically(true); // 先载入JS代码 // 复写shouldOverrideUrlLoading()方法,使得打开网页时不调用系统浏览器, 而是在本WebView中显示 web.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); // 由于设置了弹窗检验调用结果,所以需要支持js对话框 // webview只是载体,内容的渲染需要使用webviewChromClient类去实现 // 通过设置WebChromeClient对象处理JavaScript的对话框 //设置响应js 的Alert()函数(回调方法) web.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this); b.setTitle("Alter"); 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; } }); } @Override public void onClick(View view) { switch (view.getId()) { //获取本地html文件 case R.id.but: web.loadUrl("file:///android_asset/index.html"); break; //与js交互 case R.id.but2: web.post(new Runnable() { @Override public void run() { // 格式规定为:file:///android_asset/文件名.html web.loadUrl("file:///android_asset/webview.html"); web.loadUrl("javascript:callJs()"); } }); break; case R.id.but3: web.loadUrl("http://www.baidu.com/"); break; } } //销毁 @Override protected void onDestroy() { if (web != null) { web.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); web.clearHistory(); ((ViewGroup) web.getParent()).removeView(web); web.destroy(); web = null; } super.onDestroy(); } } xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.webview_js.MainActivity"> <Button android:id="@+id/but" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点我调用本地html文件" /> <Button android:text="点我调用网站" android:id="@+id/but3" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/but2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点我与Js交互" /> <WebView android:id="@+id/web" android:layout_width="match_parent" android:layout_height="match_parent"></WebView> </LinearLayout> html文件(js): <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> function callJs(){ alert("android调用了JS的call方法") } </script> </head> <body> </body> </html>
相关推荐:
Atas ialah kandungan terperinci android 与js的简单交互. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam beberapa hari kebelakangan ini, Ice Universe terus mendedahkan butiran mengenai Galaxy S25 Ultra, yang secara meluas dipercayai sebagai telefon pintar utama Samsung yang seterusnya. Antara lain, pembocor itu mendakwa bahawa Samsung hanya merancang untuk membawa satu peningkatan kamera

OnLeaks kini telah bekerjasama dengan Android Headlines untuk memberikan pandangan pertama pada Galaxy S25 Ultra, beberapa hari selepas percubaan gagal untuk menjana lebih daripada $4,000 daripada pengikut X (dahulunya Twitter). Untuk konteks, imej pemaparan yang dibenamkan di bawah h

Di samping mengumumkan dua telefon pintar baharu, TCL juga telah mengumumkan tablet Android baharu yang dipanggil NXTPAPER 14, dan saiz skrinnya yang besar adalah salah satu nilai jualannya. NXTPAPER 14 menampilkan versi 3.0 jenama tandatangan TCL panel LCD matte

Dalam beberapa hari kebelakangan ini, Ice Universe terus mendedahkan butiran mengenai Galaxy S25 Ultra, yang secara meluas dipercayai sebagai telefon pintar utama Samsung yang seterusnya. Antara lain, pembocor itu mendakwa bahawa Samsung hanya merancang untuk membawa satu peningkatan kamera

Vivo Y300 Pro baru sahaja didedahkan sepenuhnya, dan ia merupakan salah satu telefon Android jarak pertengahan paling tipis dengan bateri yang besar. Tepatnya, telefon pintar ini hanya tebal 7.69 mm tetapi mempunyai bateri 6,500 mAh. Ini adalah kapasiti yang sama seperti yang dilancarkan baru-baru ini

Samsung belum menawarkan sebarang petunjuk lagi tentang bila ia akan mengemas kini siri telefon pintar Edisi Peminat (FE). Seperti sedia ada, Galaxy S23 FE kekal sebagai edisi terbaharu syarikat, telah dibentangkan pada awal Oktober 2023. Walau bagaimanapun, banyak

Redmi Note 14 Pro Plus kini rasmi sebagai pengganti langsung kepada Redmi Note 13 Pro Plus tahun lepas (sekira $375 di Amazon). Seperti yang dijangkakan, Redmi Note 14 Pro Plus mengetuai siri Redmi Note 14 bersama Redmi Note 14 dan Redmi Note 14 Pro. Li

Jenama OnePlus iQOO mempunyai kitaran produk 2023-4 yang mungkin hampir tamat; Namun begitu, jenama itu telah mengisytiharkan bahawa ia belum selesai dengan siri Z9nya. Varian Turbo+yang terakhir, dan mungkin paling akhir, baru sahaja diumumkan seperti yang diramalkan. T
