Android从Native Code调用JS

时间:2014-03-16 19:32:12

标签: java javascript android

我试图从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();

}
} 


} 

请帮忙。

由于

1 个答案:

答案 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方法,该方法在您自己的应用程序中调用回调方法。