Java Android从本机代码调用JS
我试图从Android本机代码调用JS函数,但它们似乎不起作用。我尝试了很多解决办法,但都没有找到解决办法。这是我的密码:Java Android从本机代码调用JS,java,javascript,android,Java,Javascript,Android,我试图从Android本机代码调用JS函数,但它们似乎不起作用。我尝试了很多解决办法,但都没有找到解决办法。这是我的密码: public class MainActivity extends Activity { private WebView webView; @SuppressLint("SetJavaScriptEnabled") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance
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()。如果要显示警报对话框,需要在活动代码中处理,或使用WebChromeClient。根据文件:
创建和设置WebChromeClient子类。这个类叫做
例如,当发生可能影响浏览器UI的事件时,
在此处发送进度更新和JavaScript警报(请参阅调试)
任务)
见:
使用WebView,您仍然可以编写一个JavaScript函数,将文本框的值设置为某个字符串。如果您需要特定的代码来帮助您,请告诉我。如果你已经走到了这一步,我想你可能可以自己处理
编辑1
首先在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方法,该方法在您自己的应用程序中调用回调方法。谢谢您的回复。使用alert,我只是检查它是否有效。我的主要目标是从网页中提取“div”的值。我可以调用JS来实现这一点,即“javascript:document.getElementsByClassName('myName')[0].innerHTML;”。但我仍在思考如何从中获得价值。这就像调用一个“返回”某个值的函数。到目前为止,这对我来说仍然是个谜。也许你能帮我加快我的任务:)当然。给我一分钟。我必须在我正在做的一个项目中做这件事。@shadow检查对我答案的编辑。如果您需要更多帮助,请告诉我。谢谢您的努力:)
@JavascriptInterface
public String sendValueToAndroid(String val)
{
//do something in your app
}