安卓调用js载入卡住

JavaScript012

安卓调用js载入卡住,第1张

具体原因是这样的:

1、Java调用js里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法。

2、Java调用js的函数、没有返回值、调用了就控制不到了。

3、Js调用Java的方法、返回值如果是字符串、你会发现这个字符串是native的、转成locale的才能正常使用、使用toLocaleString()函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间。

4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验。

<button onclick="callJsLogout()">

                    退出登录

</button>

<script type="text/javascript">

function callJsLogout()

{

    var u = navigator.userAgent

    if (u.indexOf('Android') >-1 || u.indexOf('Linux') >-1) {

        // 安卓手机处理

        // window.JsToNative.User.login("js调用了android中的login方法")

        callAndroid()

    } else if (u.indexOf('iPhone') >-1) {

        // 苹果手机处理

        callJsIos()

    } else {

    }

}

function callAndroid(){

    Web.logout()//调用安卓端函数

    window.location.href="$url"//跳转地址

}

function  callJsIos() {

    window.webkit.messageHandlers.logout.postMessage({body:''})//调用IOS端函数

    window.location.href="$url"//跳转地址

}

</script>

android安卓手机微信浏览器偶尔也有这样的问题,经过多次调试,发现是微信浏览器缓存了渲染页面,没有重新渲染页面,导致window.onload中JS无法执行。

经过以上分析判断,给出的解决方案就是,如果使用了缓存,自动重载页面。以下是JS代码解决方案:

window.onpageshow = function(event) {

if (event.persisted) {

window.location.reload()

}

}

或者下方代码:

var isPageHide = false

window.addEventListener('pageshow', function () {

if (isPageHide) {

window.location.reload()

}

})

window.addEventListener('pagehide', function () {

isPageHide = true

})

html头部处理缓存信息:

扩展说明:

pageshow:

当一条会话历史记录被执行的时候将会触发页面显示(pageshow)事件。(这包括了后退/前进按钮操作,同时也会在onload 事件触发后初始化页面时触发)