我试图从 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/