最近做Android項目中遇到要在webview中做與js交互相關的東東,涉及到js中調用android本地的方法,于是查了資料整理了一下android和js互相調用的過程。如下demo,demo的主要實現過程如下:通過加載本地的html文件(里面有js腳本),實現android本地方法和js中的交互。
第一步:
mainfest.xml中加入網絡權限
<uses-permission android:name="android.permission.INTERNET" /> 第二步:加載本地寫好的html文件(定義好js中提供給android調用的方法 funFromjs(),和android提供給js調用的對象接口fun1FromAndroid(String name)),放在 assets目錄下。
<body> <a>js中調用本地方法</a> <script> function funFromjs(){ document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js"; } var aTag = document.getElementsByTagName('a')[0]; aTag.addEventListener('click', function(){ //調用android本地方法 myObj.fun1FromAndroid("調用android本地方法fun1FromAndroid(String name)!!"); return false; }, false); </script> <p></p> <div id="helloweb"> </div> </body> 第三步:實現android工程與js交互的相關代碼
android主題代碼:
@SupPRessLint({ "javascriptInterface", "SetJavascriptEnabled" }) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 initViews(); //設置編碼 mWebView.getSettings().setDefaultTextEncodingName("utf-8"); //支持js mWebView.getSettings().setJavaScriptEnabled(true); //設置背景顏色 透明 mWebView.setBackgroundColor(Color.argb(0, 0, 0, 0)); //設置本地調用對象及其接口 mWebView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj"); //載入js mWebView.loadUrl("file:///android_asset/test.html"); //點擊調用js中方法 mBtn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mWebView.loadUrl("javascript:funFromjs()"); Toast.makeText(mContext, "調用javascript:funFromjs()", Toast.LENGTH_LONG).show(); } }); } js調用的android對象方法定義public class JavaScriptObject { Context mContxt; @JavascriptInterface //sdk17版本以上加上注解 public JavaScriptObject(Context mContxt) { this.mContxt = mContxt; } public void fun1FromAndroid(String name) { Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show(); } public void fun2(String name) { Toast.makeText(mContxt, "調用fun2:" + name, Toast.LENGTH_SHORT).show(); } }
新聞熱點
疑難解答