Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android从本机代码调用JS_Java_Javascript_Android - Fatal编程技术网

Java 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

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

}
} 


} 
请帮忙

谢谢

您无法使用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
}