Comments (4)
部分方法需要在资源未加载完成前调用,这种能举例说明吗?在页面未加载完成前需要调用什么原生的方法呢?
from jsbridge-android.
部分方法需要在资源未加载完成前调用,这种能举例说明吗?在页面未加载完成前需要调用什么原生的方法呢?
getSystemInfo 方法,需要在刚进入时判断是那个系统,区分企业微信和自有App时用到的。
今天重新看这个问题发现,使用vConsole(大概十分之一的几率)如果页面出现打印日志“start jsbridge ... end jsbridge ...”时都无法调用jsbridge,不出现该日志时反而可以正常调用???
按照正常的推理,每次打开webView加载页面,注入成功后应该都会出现这个打印日志才读啊?有点看不懂了。感觉像是只要是先加载完成,后注入的话都不可以调用到jsbridge 。
只在onPageFinished时添加注入,每次都会出现该日志,这个看起来是正常的,就是不能调用到jsbridge。好像确实证实了上边的猜想。
不是很懂vue和H5的加载流程,有点猜不到是哪里的问题。
from jsbridge-android.
部分方法需要在资源未加载完成前调用,这种能举例说明吗?在页面未加载完成前需要调用什么原生的方法呢?
getSystemInfo 方法,需要在刚进入时判断是那个系统,区分企业微信和自有App时用到的。
今天重新看这个问题发现,使用vConsole(大概十分之一的几率)如果页面出现打印日志“start jsbridge ... end jsbridge ...”时都无法调用jsbridge,不出现该日志时反而可以正常调用???
按照正常的推理,每次打开webView加载页面,注入成功后应该都会出现这个打印日志才读啊?有点看不懂了。感觉像是只要是先加载完成,后注入的话都不可以调用到jsbridge 。
只在onPageFinished时添加注入,每次都会出现该日志,这个看起来是正常的,就是不能调用到jsbridge。好像确实证实了上边的猜想。
不是很懂vue和H5的加载流程,有点猜不到是哪里的问题。
你可以尝试在vue的mounted生命周期方法中去调用JS桥,例如:
mounted () {
this.toast()
},
..................
methods: {
toast () {
this.$bridge.callhandler('toast', {
'msg': '12222'
}, (response) => {
console.log(response)
})
}
}
请参考如上方式调用JS桥,必定是可以成功的,打印start jsbridge ... end jsbridge代表JS桥的JS对象初始化完成,JS桥可以进行通讯了
from jsbridge-android.
请参考如上方式调用JS桥,必定是可以成功的,打印start jsbridge ... end jsbridge代表JS桥的JS对象初始化完成,JS桥可以进行通讯了
检查了vue工程,大部分的方法调用都在mounted,少部分在created,唯一不在vue的生命周期调用的只有getSystemInfo这个方法。
使用vConsole的命令行查看window.WebViewJavascriptBridge,确实是存在的,说明已经初始化完成了,使用命令行调用其它插件方法也能成功。看起来确实是getSystemInfo在资源未加载完成时调用了,导致无法获取到系统类型,也就无法初始化window.mappType,最终导致不能成功调用其它方法。
在不能修改vue工程配置的情况下,为了兼容这种不确定因素,目前是在onPageFinished中使用loadUrl主动修改window.mappType值,在onPageStarted等其它方法中进行判断注入jsbridge,这样在页面加载完成后调用jsbridge都是可以的。
暂时能想到的解决方法就是这些了,基本上不影响我的应用功能。
from jsbridge-android.
Related Issues (20)
- 无法注册单个Handler HOT 6
- 关于WebViewJavascriptBridge名称的问题 HOT 2
- 帅哥,牛比
- Maybe very good!
- Jcenter停止维护 HOT 1
- BridgeWebViewClient未public HOT 5
- bridge方法如果传值string,android端拿到两头会自带双引号 HOT 3
- jsbridge必须要在页面完全加载完才加载生效 HOT 2
- 我已经重新设计了新的交互库,10分钟就能完成接入,也许可以帮助你. HOT 1
- BridgeWebView 里面 bridgeTiny.freeMemory()这个方法能够给个方法单独暴露出来吗 HOT 1
- eval-unsafe HOT 1
- CallBackFunction只能用一次 HOT 1
- ./gradlew build 失败 HOT 1
- 微信h5支付异常 HOT 2
- webview加载 超长js 脚本,参数过长被截取长度,导致失败
- demo里引用的远程的库,不是module中的源码,有些不方便查看。
- 网页换成网络地址以后无法展示 HOT 2
- gradle 6.0 以上 無法跑通project HOT 1
- 混淆后js无法被调用 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsbridge-android.