当前位置:首页 > 行业动态 > 正文

Android调用JS返回值机制解析及问题解析

在Android中调用JavaScript并获取返回值,通常使用WebView的evaluateJavascript方法执行JS代码,并通过回调接口处理返回结果。

Android调JS返回值全解析

# 一、Android调JS返回值的准备工作

1. 创建WebView:在Android应用中,需要在布局文件中添加WebView控件,用于加载和显示网页内容,在res/layout/activity_main.xml文件中添加如下代码:

“`xml

android:id=”@+id/webview”

android:layout_width=”match_parent”

android:layout_height=”match_parent”/>

“`

2. 编写JavaScript代码:创建一个包含JavaScript函数的HTML文件,并将其放置在Android项目的assets文件夹中,创建一个名为index.html的文件,内容如下:

“`html

My Web Page

Welcome to my Web Page

“`

# 二、调用JavaScript函数并获取返回值的方法

1. 使用evaluateJavascript方法:在Android代码中,可以通过WebView的evaluateJavascript方法来调用JavaScript函数,并接收其返回值,在MainActivity.java中添加如下代码:

“`java

import android.os.Bundle;

import android.webkit.WebSettings;

import android.webkit.WebView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

private WebView webView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

webView = findViewById(R.id.webview);

WebSettings webSettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true);

webView.loadUrl(“file:///android_asset/index.html”);

webView.evaluateJavascript(“greet(‘World’)”, new ValueCallback () {

@Override

public void onReceiveValue(String value) {

// 处理JavaScript函数的返回值

System.out.println(“JavaScript 返回值: ” + value);

}

});

}

}

“`

2. 使用shouldOverrideUrlLoading方法:另一种方法是通过重写WebViewClient的shouldOverrideUrlLoading方法来处理JavaScript返回值,在JavaScript函数中使用window.prompt方法返回数值,然后在Android代码中重写shouldOverrideUrlLoading方法来捕获并处理该返回值,修改index.html中的greet函数为:

“`html

“`

并在MainActivity.java中添加如下代码:

“`java

import android.webkit.WebView;

import android.webkit.WebViewClient;

webView.setWebViewClient(new WebViewClient() {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.startsWith(“jsreturn:”)) {

String value = url.replace(“jsreturn:”, “”);

// 处理JavaScript返回值

System.out.println(“JavaScript 返回值: ” + value);

return true;

}

return super.shouldOverrideUrlLoading(view, url);

}

});

“`

# 三、示例代码整合

以下是一个完整的示例代码,展示了如何在Android应用中调用JavaScript函数并获取返回值:

“`java

import android.os.Bundle;

import android.webkit.JavascriptInterface;

import android.webkit.WebSettings;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

private WebView webView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

webView = findViewById(R.id.webview);

WebSettings webSettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true);

webView.loadUrl(“file:///android_asset/index.html”);

webView.evaluateJavascript(“greet(‘World’)”, new ValueCallback () {

@Override

public void onReceiveValue(String value) {

// 处理JavaScript函数的返回值

System.out.println(“JavaScript 返回值: ” + value);

}

});

webView.setWebViewClient(new WebViewClient() {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.startsWith(“jsreturn:”)) {

String value = url.replace(“jsreturn:”, “”);

// 处理JavaScript返回值

System.out.println(“JavaScript 返回值: ” + value);

return true;

}

return super.shouldOverrideUrlLoading(view, url);

}

});

}

“`

对应的index.html文件内容为:

“`html

My Web Page

Welcome to my Web Page

“`

# 四、相关问题与解答

| 问题 | 解答 |

| –| –|

| Q1: 如何在Android中调用JavaScript函数并获取返回值? | A1: 在Android中,可以通过WebView的evaluateJavascript方法来调用JavaScript函数并获取返回值,需要先启用WebView的JavaScript支持,然后使用evaluateJavascript方法传递JavaScript代码并接收返回值。 |

| Q2: 如果JavaScript函数没有返回值或者返回值不是字符串类型,应该如何处理? | A2: 如果JavaScript函数没有返回值或者返回值不是字符串类型,可以在JavaScript函数中使用其他方式来传递数据,例如通过修改DOM元素的内容或使用自定义的URL协议,在Android端,可以通过监听相应的事件或拦截URL请求来获取这些数据。 |

0