android 连续调用js方法,Android的WebView中的JavascriptInterface:对JS的多次调用会导致死锁...
这是我用过的整个Java代码。我将在下面更详细地解释...
public class Test7 extends Activity {
//debug
private final static String TAG = "JSInterface";
private WebView wv;
private class JSInterface {
private WebView wv;
// Variables to manage interfacing with JS
private String returnValue;
private boolean canReadReturnValue;
private Lock lockOnJS;
private Condition condVarOnJS;
public JSInterface (WebView wv) {
this.wv = wv;
this.canReadReturnValue = false;
this.lockOnJS = new ReentrantLock();
this.condVarOnJS = lockOnJS.newCondition();
}
public void setReturnValue(String ret) {
lockOnJS.lock();
returnValue = ret;
canReadReturnValue = true;
condVarOnJS.signal();
lockOnJS.unlock();
Log.d(TAG, "returnValue = " + returnValue);
}
public String getReturnValue() {
Log.d(TAG, "enter in getReturnValue");
lockOnJS.lock();
while (!canReadReturnValue) {
try {
Log.d(TAG, "get wait...");
condVarOnJS.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
lockOnJS.unlock();
Log.d(TAG, "returnValue: " + returnValue);
return returnValue;
}
public String getNewString() {
wv.loadUrl("javascript:JSInterface.setReturnValue(createNewString())");
return getReturnValue();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
wv = (WebView) findViewById(R.id.webView1);
wv.getSettings().setJavaScriptEnabled(true);
wv.addJavascriptInterface(new JSInterface(wv), "JSInterface");
wv.loadUrl("file:///android_asset/prova7.html");
}
public void button1(View v) {
wv.loadUrl("javascript:func('1')");
}
}它似乎工作正常。
你可以看到我有一个按钮(我们可以调用button1),然后单击它,它会尝试执行一个名为func()的JS方法。
public void button1(View v) {
wv.loadUrl("javascript:func('1')");
}在这个JS方法中,我必须调用另一个Java方法。这是代码:
function func(id) {
document.getElementById(id).innerHTML = JSInterface.getNewString();
}我需要将JSInterface.getNewString()的结果返回给innerHTML变量。
JSInterface.getNewString()的代码是这样的:
public String getNewString() {
wv.loadUrl("javascript:JSInterface.setReturnValue(createNewString())");
return getReturnValue();
}你可以看到我使用方法setReturnValue和getReturnValue来返回另一个JS方法返回的值。这是代码:
function createNewString() {
return "my New String";
}问题是,当我尝试设置returnValue时,函数createNewString永远不会执行!如果我添加一个console.log()行,我的logCat不显示任何内容!
我不明白为什么会发生这种情况。请帮我解决这个大问题!
每一个帮助将不胜感激
android 连续调用js方法,Android的WebView中的JavascriptInterface:对JS的多次调用会导致死锁...相关推荐
- Android Studio开发安卓app 安卓与webview中的js交互
Android Studio开发安卓app 安卓与webview中的js交互 1.webview中的页面调用android中的方法 在Android Studio开发安卓app 封装WEB(H5,UR ...
- import android.view.window;,尝试在空对象引用上调用虚拟方法‘android.view.Window$回调...
尝试在空对象引用上调用虚拟方法'android.view.Window$回调-android.view.Window.getCallback()' 当我SplashActivity打开LoginAct ...
- android颜色值的表示方法android:background=#FFFFFFFF的意思
android颜色值的表示方法 android:background="#FFFFFFFF"的意思 Android中的颜色值是通过红(Red).绿(Green).蓝(Blue)三原 ...
- html中如何引入vue,vue.js怎样引入到HTML中,vue引入第三方js库
vue.js怎样引入到HTML中如何将vue.js引入HTML,把vue.js引入HTML的方法:一.下载vue . js:然后在HTML中添加vue.js包,其语法为"script src ...
- android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调
项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...
- uniapp调用手机摄像头_uniapp原生插件开发之调用原生方法(android)
需要实现的功能: 点击uniapp页面view,传递参数,调用android原生代码,然后原生代码处理数据,返回到uniapp页面 步骤 1.编写uniapp的视图页面 {{title}} 点击调用a ...
- android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...
我收到这个错误, "Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' ...
- java 防止js注入_在WebView中如何让JS与Java安全地互相调用
在现在安卓应用原生开发中,为了追求开发的效率以及移植的便利性,使用WebView作为业务内容展示与交互的主要载体是个不错的折中方案.那么在 这种Hybrid(混合式) App中,难免就会遇到页面JS需 ...
- android源码使用方法,android源码中使用到的设计模式(创建型)
1.单例模式 1.1定义 确保某个类只有一个实例,而且自行实例化并向整个系统提供者个实例. 1.2单例的形式 饿汉模式:第一次就加载,用空间换时间. public class SingleTon { ...
最新文章
- 计算概论c和文科计算机,计算概论与计算机程序设计基础/C语言【理工学社】
- form表单刷新_《大胖 ? 小课》- 不用 js 实现文件无刷新上传
- linux 网卡配置不一致,linux环境下,双网卡配置不同网段后,路由问题
- Spring5-IOC底层原理
- JeecgBoot 移动OA 新版本出炉,速度体验!!!
- 2018年90后薪资报告出炉:你在哪个级别???
- Android基于Socket无线遥控 - 模拟触摸按键篇framework jar
- OpenCV图像处理(2)——形态学操作
- 这顶海贼王的帽子,我Python给你带上了 | 【人脸识别应用】
- unixbench分析_unixbench测试CPU性能工具
- 2017CS231n李飞飞深度视觉识别笔记(八)——深度学习 软件
- win7查看计算机设置密码,如何查看win7电脑开机密码_win7专业版电脑开机密码怎么查看...
- 泰勒公式的展开细节解析
- 计算机三维课设的目的和意义,三维动漫设计开题报告
- [转]孙悟空无姓无名的时候,阎王生死簿是怎么写的呢?
- opencv阈值图像Threshold方法
- 共模扼流圈的工作原理与作用以及特点和应用详解
- 群辉videostation支持DST、EAC3
- java jdk 7_jdk1.7 64位-jdk7 64位下载7u80 官方正式版(Java SE Development Kit 7)-西西软件下载...
- Hilberling电源维修罗芬Rofin激光电源控制器维修HG-101A