我试图从Android原生代码调用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();
}
}
}
请帮忙。
由于
答案 0 :(得分:1)
你不能用Android的WebView做alert()。如果要显示警报对话框,则需要在活动代码中处理它或使用WebChromeClient。根据文档:
创建和设置WebChromeClient子类。这个类叫做 例如,当某些可能影响浏览器UI的事件发生时 此处发送进度更新和JavaScript警报(请参阅调试 任务)。
请参阅: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方法,该方法在您自己的应用程序中调用回调方法。