首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android setVisibility(LinearLayout.VISIBLE)在WebView @JavascriptInterface函数中不起作用

android setVisibility(LinearLayout.VISIBLE)在WebView @JavascriptInterface函数中不起作用是因为WebView在加载网页时会创建一个独立的进程,该进程与主进程是相互隔离的。因此,在WebView的@JavascriptInterface函数中直接调用Android的UI操作是无效的。

解决这个问题的方法是通过Handler机制来实现UI操作。具体步骤如下:

  1. 在主线程中创建一个Handler对象,并重写其handleMessage()方法。
代码语言:txt
复制
Handler handler = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        // 在这里进行UI操作
        if (msg.what == 1) {
            LinearLayout layout = findViewById(R.id.layout);
            layout.setVisibility(View.VISIBLE);
        }
    }
};
  1. 在WebView的@JavascriptInterface函数中通过Handler发送消息。
代码语言:txt
复制
@JavascriptInterface
public void showLayout() {
    Message message = new Message();
    message.what = 1;
    handler.sendMessage(message);
}
  1. 在WebView加载网页之前,通过addJavascriptInterface()方法将Java对象注入到WebView中。
代码语言:txt
复制
webView.addJavascriptInterface(new JavaScriptInterface(), "Android");
  1. 在网页中通过JavaScript调用Java对象的方法。
代码语言:txt
复制
<script>
    function showLayout() {
        Android.showLayout();
    }
</script>

这样就可以在WebView的@JavascriptInterface函数中通过Handler来实现UI操作了。

推荐的腾讯云相关产品:腾讯云移动应用分析(MTA),该产品提供了全面的移动应用数据分析服务,帮助开发者深入了解用户行为和应用性能,优化产品体验。产品介绍链接地址:https://cloud.tencent.com/product/mta

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WebView完全解读

概述 WebView控件可以自己的应用程序显示本地或者Internet上的网页。 WebView是一个使用WebKit引擎(4.4之后基于Chromium)的浏览器控件。...因此可以将WebView当做一个完整的浏览器使用。 WebView不仅支持HTML、CSS等静态元素,还支持JavaScript,而且JavaScript还可以调用Java的方法。...实现关键: 利用onload()在网页加载的时候加载相应的js脚本,而js脚本定义的一个函数是 取出传递过来的对象,获取里面的数据,通过for循环以单元行的形式打印出来!..., * 然后显示到HTML 当我们点击某个电话号码时,会直接跳转到拨号页面 * 实现关键: 利用onload()在网页加载的时候加载相应的js脚本, * 而js脚本定义的一个函数是 取出传递过来的对象...对于4.4后的WebView,我们需要注意下下面这些问题: 多线程 如果你子线程调用WebView的相关方法,而不在UI线程,则可能会出现无法预料的错误。

3.3K10
  • AndroidWebView与H5前端JS代码交互的实例代码

    另一种就是通过谷歌提供的JS与Java绑定的接口,约定好要交互的对象名,类似于下面的“App” //通过WebView提供的addJavascriptInterface这行代码,我们浏览器的JS环境创建了一个..."App"对象 //这个对象下的函数就是自定义接口类里面通过 @JavascriptInterface注解的Java方法转换而来的 mWebView.addJavascriptInterface(new...转化成绑定的“App”对象下的同名函数,js代码可以直接调用 @JavascriptInterface public void presentCamera(String data) {...iPhone或者是Android,统一发出和接受对象,传入回调函数,能够减少他们很多工作量。...对了,因为Android版本不一致,webview的兼容性参差不齐,选用了腾讯的X5内核浏览器来加载,其中有个坑就是全屏播放视频会有qq浏览器的广告,这个可以通过代码去掉,也拿出来分享下吧: //去掉

    1.8K31

    AndroidJava和JavaScript交互

    Android提供了一个很强大的WebView控件用来处理Web网页,而在网页,JavaScript又是一个很举足轻重的脚本。本文将介绍如何实现Java代码和Javascript代码的相互调用。...; import android.webkit.JavascriptInterface; import android.webkit.WebChromeClient; import android.webkit.WebSettings...); 调用js有参数有返回值的函数 Android4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回...(number1 + number2) } 3.Java回调方法获取js函数返回值 lineos:false 1 2 3 4 @JavascriptInterface public void onSumResult...如打印日志可验证 lineos:false 1 ThreadInfo=Thread[WebViewCoreThread,5,main] 解决上述的异常,将webview操作放在主线程即可。

    92520

    一文彻底搞懂安卓WebView白名单校验

    Android SDK中封装了一个可以很方便的加载、显示网页的控件,叫做WebView,全限定名为:android.webkit.WebView。...WebView只是Android SDK的一个控件,其本身就像一个与APP隔离开的容器,WebView中加载的所有页面都运行在这个容器,无法与APP Java(或者Kotlin)层或者native...每一次shouldOverrideUrlLoading的时候都把新的URL传给JsObject以备JavascriptInterface检测。...webview加载hicloud.com下的poc.htm。 poc第一步先定义一个延迟执行函数test,延迟500ms,test函数调用getToken。...如果需要对白名单进行安全等级划分,还需要在JavascriptInterface中加入校验函数JavascriptInterface需要使用webview.getUrl()来获取webview当前所在域

    4.8K40

    Android WebView与JS交互实例

    本地方法(传递参数) 3、外部注入js代码 4、WebView长按事件 相关JS代码: js调用android原生代码 <meta...javacalljs(){ document.getElementById("content").innerHTML += "java调用了js<em>函数</em>...--可以将<em>android</em>端传过来的数据,处理后,放在这里再传给<em>android</em>端--> <a onClick="window.injectedObject.startFunction('我是网页传出来的数据...// 传递参数调用 webView.loadUrl("javascript:javacalljswithargs('" + "android传入到网页里的数据,有参" + "')"); 2、如果是显示后就调用...html加载完成之后,我们调用这段js: // 这段js函数的功能就是,遍历所有的img节点,并添加onclick函数函数的功能是图片点击的时候调用本地java接口并传递url过去 webView.loadUrl

    4.1K20

    JSBridge小科普

    jsBridge_native Schema.png 1.2 通过代码注入(针对webView组件) 以Android为例,可以通过addJavascriptInterface方法将Native的一个对象注入到页面.../** * 添加javascriptInterface * 第一个参数:这里需要一个与js映射的java对象 * 第二个参数:该java对象被映射为js对象后js里面的对象名,js要调用该对象的方法就是通过这个来调用...java方法 */ android.showToast('toast'); Native会向webView全局作用域注入一个android的全局对象,该对象上有showToast的方法。...如, Webview 上添加 onJsConfirm或onJsPrompt 监听(其实,监听window.console或者window.alert也是可以的,但是这两个方法JS coding中比较常用...Android 4.4 以前,通过 loadUrl 方法,执行一段 JS 代码来实现(缺点是效率低,无法获得返回结果,且调用的时候会刷新 WebView): /** * js声明全局函数 */ <

    2.8K30

    Android开发进阶系列,整理】Android与h5交互专题

    1 交互原理 1.1 webview如何加载H5页面         我们都知道Android是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同: *//加载assets...②调用H5带返回值的方法 可以调用mWebView.evaluateJavascript()方法,该方法只安卓4.4以上版本适用,图3为Android调用H5带返回值的方法。...调用H5带参数的方法 1.3 h5调用Android原生方法 1.3.1 @JavascriptInterface注解使用     Android4.2以上可以直接使用@JavascriptInterface..."); 那么js怎么来调用呢?...①.Java调用js代码 String call = "javascript: sumToJava(1, 2)"; webView.loadUrl(call); ②.js函数处理,并将结果通过调用java

    84440

    浅谈android和js的交互问题

    现在很多app里面很多功能都用html5实现,也就是用webview加载html显示一些 图文信息。这么做的好处就是减少开发成本 ,一套htmlandroid  ,ios及web都可以跑。...所以下面给大家说一下android和js怎么实现交互(android调用js的方法,js里面调用android的方法)。...二.android调用js android 调用js   客户端代码:  mWebView.loadUrl("javascript:funFromjs()"); funFromjs这个函数html...; js代码里面的 myObj  不用特殊定义一个对象 ,这个对象是android webview加载html时候注入的对象,可以认为他们俩就是一个对象。...正常需要判断为 targetSdkVersion>=17时,需要加上@JavascriptInterface,所以target=android-17或更高以便引入高版本android.jar。

    81320
    领券