在android中怎样调用本地js文件里的方法并得到返回值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在android中怎样调用本地js文件里的方法并得到返回值相关的知识,希望对你有一定的参考价值。

您好,很高兴能帮助您,
android中webview和js之间的交互
1.android中利用webview调用网页上的js代码。
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示:
mWebView.getSettings().setjavascriptEnabled(true);
mWebView.loadUrl("javascript:test()");
2. 网页上调用android中java代码的方法
在网页中调用java代码,需要在webview控件中添加javascriptInterface。如下所示:
mWebView.addJavascriptInterface(new Object()
public void clickOnAndroid()
mHandler.post(new Runnable()
public void run()
Toast.makeText(Test.this, "测试调用java", Toast.LENGTH_LONG).show();

);

, "demo");
在网页中,只需要像调用js方法一样,进行调用就可以
<div id=\'b\'><a onclick="window.demo.clickOnAndroid()">b.c</a></div>
3. Java代码调用js并传参
首先需要带参数的js函数,如function test(str),然后只需在调用js时传入参数即可,如下所示:
mWebView.loadUrl("javascript:test(\'aa\')");
4.Js中调用java函数并传参
首先一样需要带参数的函数形式,但需注意此处的参数需要final类型,即得到以后不可修改,如果需要修改其中的值,可以先设置中间变量,然后进行修改。如下所示:
mWebView.addJavascriptInterface(new Object()
public void clickOnAndroid(final int i)
mHandler.post(new Runnable()
public void run()
int j = i;
j++;
Toast.makeText(Test.this, "测试调用java" + String.valueOf(j), Toast.LENGTH_LONG).show();

);

, "demo");
然后在html页面中,利用如下代码<div id=\'b\'><a onclick="window.demo.clickOnAndroid(2)">b.c</a></div>,
即可实现调用
你的采纳是我前进的动力,还有不懂的地方,请你继续“追问”!
如你还有别的问题,可另外向我求助;答题不易,互相理解,互相帮助!
参考技术A 在android中调用本地js文件里的方法并得到返回值其方法如下:

Android中内置了WebKit模块,而该模块的Java层视图类就是WebView,所有需要使用Web浏览器功能的Android都需要创建该视图类对象显示和处理请求的网络资源。目前WebKit支持Http、Https、Ftp和JavaScript请求。下面是在Android中调用JavaScript方法以及如何在js中调用本地方法。

1、在Assets下放一个简单的html文件jstest.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd">
<HTML>
<HEAD>
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" />
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function showMsg()
alert("hello world!");

function showMsgInAndroid()
myjs.showMsg('hello in android!');

</script>
</HEAD>
<BODY>
<span>测试js使用</span>

<button id='btntest' onclick='showMsgInAndroid()'>调用android方法</button>
</BODY>
</HTML>
2、布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/rl_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<WebView
android:id="@+id/wv_test"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/btn_showmsg"/>
<Button
android:id="@+id/btn_showmsg"
android:layout_width="200dip"
android:layout_height="40dip"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="调用html中js方法"/>
</RelativeLayout>

3、然后是Activity,MainActivity.java
package com.harold.jstest;

import com.harold.base.JSKit;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Button;

public class MainActivity extends Activity

private WebView mWebView;
private Button btnShowInfo;
private JSKit js;
private Handler mHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化控件
mWebView = (WebView) findViewById(R.id.wv_test);
btnShowInfo = (Button) findViewById(R.id.btn_showmsg);
//实例化js对象
js = new JSKit(this);
//设置参数
mWebView.getSettings().setBuiltInZoomControls(true);
//内容的渲染需要webviewChromClient去实现,设置webviewChromClient基类,解决js中alert不弹出的问题和其他内容渲染问题
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
//把js绑定到全局的myjs上,myjs的作用域是全局的,初始化后可随处使用
mWebView.addJavascriptInterface(js, "myjs");

mWebView.loadUrl("file:///android_asset/jstest.html");

btnShowInfo.setOnClickListener(new OnClickListener()

@Override
public void onClick(View v)
mHandler.post(new Runnable()
@Override
public void run()
//调用 HTML 中的javaScript 函数
mWebView.loadUrl("javascript:showMsg()");

);

);




4、最后是绑定全局js的类JSKit.java
package com.harold.base;

import android.widget.Toast;

import com.harold.jstest.MainActivity;

public class JSKit
private MainActivity ma;

public JSKit(MainActivity context)
this.ma = context;


public void showMsg(String msg)
Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show();



例子比较简单,代码里都加了注释,这里就不多说了,本示例用的本地的html,如果访问网络中的网页,别忘记在AndroidManifest.xml中加权限
<uses-permission android:name="android.permission.INTERNET"/>

怎么调用外部js文件?

就是把html里的javascript脚本跟页面代码分离出来,非网络调用!

看随机抽取这个例子。在一个页面中如下:

我们可以把 js 放在另外一个文件里,比如当前文件夹的 a.js 中。

这样 html 页面如下:

a.js

这样就行了。

当然,也可以把 a.js放在web上,然后引用成下面这样。

参考技术A 首先要将页面中的js代码放到一个a.js文件中,然后将a.js文件放在网站目录下,
然后在html的head中<script src="js/a.js" type="text/javascript"></script>
a.js你可以根据需要命名,然后src要用相对路径。
参考技术B 在JS文件A中调用另一JS文件B,可以实现,但只能等A载入完成后才能载入B,实现代码:
在A中插入以下代码(经本地调试成功)
var otherJS = 'diaoyong.js';//js的地址,请自定义
document.write('');

如要调试,请在与页面同目录创建diaoyong.js,内容为
alert('调用到了外部的js!');

以上将追加在A引用的后面

注意:只能等A载入完成后才能载入B,所以A在载入完成后不能马上执行B中的任何代码的,它们间相互调用的代码必须等B也载入完成后才行;而且应该尽量使用函数直接定义,而非变量赋值匿名函数的方式来创建函数。
参考技术C <script src="js地址" type="text/javascript"></script> 参考技术D <script src=''位置''> </script>

以上是关于在android中怎样调用本地js文件里的方法并得到返回值的主要内容,如果未能解决你的问题,请参考以下文章

android使用WebView里的js与android进行交互!

Android与js互相调用

android如何调用本地html文件

thinkcmf 里js怎样调用控制器的值

ios怎样调用类方法?

关于Android中WebView在加载网页的时候,怎样应用本地的CSS效果