我想在我的Android应用程序中对某些Java代码进行同步调用.
我正在使用此解决方案:https: //stackoverflow.com/a/3338656
我的Java代码:
final class MyWebChromeClient extends WebChromeClient {
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d("LogTag", message);
result.confirm();
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我的JavaScript代码:
<html>
<script>
function java_request(){
alert('test');
}
</script>
<body>
<h2>Welcome</h2>
<div id="area"></div>
<form>
<input type="button" value="java_call" onclick="java_request()">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我点击java_call按钮时,按钮进入按下状态.我可以'test'在控制台日志中看到.一切都很正常,直到这里.
问题是,按钮永远不会恢复到正常状态.它保持在按下状态.也许JavaScript执行被破坏了什么?
为什么按钮永远不会恢复正常状态?
我正在尝试在Android 4.4中使用新的evaluateJavascript方法,但我得到的所有内容都是null结果:
webView1.evaluateJavascript("return \"test\";", new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("LogName", s); // Log is written, but s is always null
}
});
Run Code Online (Sandbox Code Playgroud)
如何将结果返回此方法?
更新:更多信息:
setJavascriptEnabled(true);return 'test';,return { test: 'this' }console.log('test'); 正在执行罚款.targetSdkVersion为19:如果您的应用使用WebView设备: Nexus 7和Nexus 5(股票)
我在WebView中运行了一些javascript,我希望收到有关JS中错误的控制台消息.按照http://developer.android.com/guide/webapps/debugging.html上的说明,我覆盖了方法
WebChromeClient.onConsoleMessage(String message, int lineNumber, String sourceID)
和
WebChromeClient.onConsoleMessage(ConsoleMessage cm),
将消息重定向到logcat.在Android 2.1中它运行良好,但在Android 2.2中没有调用此方法.
我做错了什么?
谢谢.
我在HTML中创建一个非常简单的表单,在Android中使用webview查看,使用文本框输入你的名字,当你点击按钮时,它会将它显示在一个段落中,并使用html和javascript进行制作.这是我的HTML代码:
<!DOCTYPE html>
<html>
<body>
<p> Write your name and win your favorite game console name and win it! The winners will be announced in 4 days.</p>
Type your name here: <input id="thebox" type="text" name="value" value=""><br>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction() {
var x = document.getElementById("thebox").value;
document.getElementById("demo").innerHTML = x;
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
新编辑表格
<form name="albert" action="" method="POST">
<label for="firstname"> First Name </label>
<br /><br />
<input type="text" name="firstname" id="firstname" />
<input type="submit" name="sbumit" value="Submit" />
</form> …Run Code Online (Sandbox Code Playgroud) 我想让我的Android应用程序调用一个用javascript编写的函数,并期望从中获得返回值.
我知道WebView.loadUrl是异步工作的,所以我现在要做的就是让javascript在完成后通知我的android应用程序,并通过使用javascriptinterface调用java函数传递返回值.
我想知道是否有更好的方法来做这个以及是否有人注意到javascript和android之间的任何消息丢失.
我必须开发一个电子商务移动应用程序.为了将产品展示到应用程序中,我必须使用指向移动网站的webview.与每个产品相关联的是"添加到购物篮"按钮.此按钮也是移动网站的一个元素.在移动应用程序的标签栏中(而不是在webview中),有一个篮子的图标,其中包含篮子的元素数量.webview如何知道用户已将一个或多个元素添加到购物篮并将此信息发送到可以更新购物篮图标的原生移动应用程序?
有一种方法可以从webview调用javascript函数,然后让它调用Java中的方法来返回结果.就像在如何从android的webview中获取javascript的返回值一样?
现在,javascript函数可能会失败(比如由于javascript文件中的拼写错误).在这种情况下,我想在Java中执行一些故障转移代码.有什么好办法呢?
我当前的代码如下所示:
在Java中:
private boolean eventHandled = false;
@Override
public void onEvent() {
eventHandled = false;
webview.loadUrl("javascript:handleEvent()");
// Wait for JS to handle the event.
try {
Thread.sleep(500); // milliseconds
} catch (InterruptedException e) {
// log
}
if (!eventHandled) {
// run failover code here.
}
}
public final MyActivity activity = this;
public class EventManager {
// This annotation is required in Jelly Bean and later:
@JavascriptInterface
public void setEventHandled() {
eventHandled = true; …Run Code Online (Sandbox Code Playgroud) android ×8
webview ×4
javascript ×3
copy-paste ×1
html-parsing ×1
ios ×1
java ×1
native-code ×1