java - Android从Native Code调用JS

标签 java javascript android

我试图从 Android native 代码调用 JS 函数,但它们似乎不起作用。我尝试了很多解决方案,但没有解决。这是我的代码:

public class MainActivity extends Activity {

private WebView webView;

@SuppressLint("SetJavaScriptEnabled")
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

webView = (WebView) findViewById(R.id.webView1);
webView.setWebViewClient(new MyCustomWebViewClient());

webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);

webView.loadUrl("http://google.com");

}

private class MyCustomWebViewClient extends WebViewClient {

@Override
public void onPageFinished(WebView view, String url) {
    webView.loadUrl("javascript:alert('shadow');");
    Toast.makeText(getApplicationContext(), "DONE", Toast.LENGTH_LONG).show();

}
} 


} 

请帮忙。

谢谢

最佳答案

您无法使用 Android 的 WebView 执行alert()。如果您想显示警报对话框,您需要在 Activity 代码中处理它或使用 WebChromeClient。根据文档:

Creating and setting a WebChromeClient subclass. This class is called when something that might impact a browser UI happens, for instance, progress updates and JavaScript alerts are sent here (see Debugging Tasks).

参见:https://developer.android.com/reference/android/webkit/WebView.html

使用 WebView,您仍然可以编写 JavaScript 函数,将文本框的值设置为某个字符串。如果您需要特定代码来帮助您解决此问题,请告诉我。如果您已经走到这一步,我猜您可能可以自己处理。

编辑 1

首先在 JavaScript 中创建一个名为 sendValueToAndroid() 的方法

myWebView.loadUrl("javascript:sendValueToAndroid()");   

在 JavaScript 方法中,调用 Android 代码中公开的方法。

function sendValueToAndroid()
{
    val divValue = ...
    Android.sendValueToAndroid(divValue);
}

在您选择的任何对象中公开 Android 应用程序中的方法。

@JavascriptInterface
public String sendValueToAndroid(String val)
{
    //do something in your app
}

基本上,您所做的就是告诉 WebView 调用 JavaScript 方法,该方法会在您自己的应用程序中调用回调方法。

关于java - Android从Native Code调用JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22441795/

相关文章:

java - 使用java配置自动加载spring组件

javascript - 如何在reactjs中上传到Firebase存储之前调整图像大小

javascript - JSON.parse 不适用于 iPad safari

android - 如何在 android 中嵌入和播放 YouTube 视频

android - 在 Firebase 中,如何只向特定的人发送消息

java - 为什么 session 变量必须是可序列化的?

java - 在java中使用正则表达式从字符串中提取数字

Java 安装 - 不运行类

javascript - 使用 Angular js 将具有相同 id 的重复对象从 json 数据合并到单个对象中

Android打开失败: EACCES (Permission denied) in implementing PDF Reader library