# JsBridge
-----
inspired and modified from [this](https://github.com/jacin1/JsBridge) and wechat jsBridge file, with some bugs fix and feature enhancement.
This project make a bridge between Java and JavaScript.
It provides safe and convenient way to call Java code from js and call js code from java.
## Demo
![JsBridge Demo](https://raw.githubusercontent.com/lzyzsd/JsBridge/master/JsBridge.gif)
## Usage
## JitPack.io
I strongly recommend https://jitpack.io
```groovy
repositories {
// ...
maven { url "https://jitpack.io" }
}
dependencies {
compile 'com.github.lzyzsd:jsbridge:1.0.4'
}
```
## Use it in Java
add com.github.lzyzsd.jsbridge.BridgeWebView to your layout, it is inherited from WebView.
### Register a Java handler function so that js can call
```java
webView.registerHandler("submitFromWeb", new BridgeHandler() {
@Override
public void handler(String data, CallBackFunction function) {
Log.i(TAG, "handler = submitFromWeb, data from web = " + data);
function.onCallBack("submitFromWeb exe, response data from Java");
}
});
```
js can call this Java handler method "submitFromWeb" through:
```javascript
WebViewJavascriptBridge.callHandler(
'submitFromWeb'
, {'param': str1}
, function(responseData) {
document.getElementById("show").innerHTML = "send get responseData from java, data = " + responseData
}
);
```
You can set a default handler in Java, so that js can send message to Java without assigned handlerName
```java
webView.setDefaultHandler(new DefaultHandler());
```
```javascript
window.WebViewJavascriptBridge.doSend(
data
, function(responseData) {
document.getElementById("show").innerHTML = "repsonseData from java, data = " + responseData
}
);
```
### Register a JavaScript handler function so that Java can call
```javascript
WebViewJavascriptBridge.registerHandler("functionInJs", function(data, responseCallback) {
document.getElementById("show").innerHTML = ("data from Java: = " + data);
var responseData = "Javascript Says Right back aka!";
responseCallback(responseData);
});
```
Java can call this js handler function "functionInJs" through:
```java
webView.callHandler("functionInJs", new Gson().toJson(user), new CallBackFunction() {
@Override
public void onCallBack(String data) {
}
});
```
You can also define a default handler use init method, so that Java can send message to js without assigned handlerName
for example:
```javascript
window.WebViewJavascriptBridge.init(function(message, responseCallback) {
console.log('JS got a message', message);
var data = {
'Javascript Responds': 'Wee!'
};
console.log('JS responding with', data);
responseCallback(data);
});
```
```java
webView.send("hello");
```
will print 'JS got a message hello' and 'JS responding with' in webview console.
## Notice
This lib will inject a WebViewJavascriptBridge Object to window object.
You can listen to `WebViewJavascriptBridgeReady` event to ensure `window.WebViewJavascriptBridge` is exist, as the blow code shows:
```javascript
if (window.WebViewJavascriptBridge) {
//do your work here
} else {
document.addEventListener(
'WebViewJavascriptBridgeReady'
, function() {
//do your work here
},
false
);
}
```
Or put all JsBridge function call into `window.WVJBCallbacks` array if `window.WebViewJavascriptBridge` is undefined, this task queue will be flushed when `WebViewJavascriptBridgeReady` event triggered.
Copy and paste setupWebViewJavascriptBridge into your JS:
```javascript
function setupWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) {
return callback(WebViewJavascriptBridge);
}
if (window.WVJBCallbacks) {
return window.WVJBCallbacks.push(callback);
}
window.WVJBCallbacks = [callback];
}
```
Call `setupWebViewJavascriptBridge` and then use the bridge to register handlers or call Java handlers:
```javascript
setupWebViewJavascriptBridge(function(bridge) {
bridge.registerHandler('JS Echo', function(data, responseCallback) {
console.log("JS Echo called with:", data);
responseCallback(data);
});
bridge.callHandler('ObjC Echo', {'key':'value'}, function(responseData) {
console.log("JS received response:", responseData);
});
});
```
It same with https://github.com/marcuswestin/WebViewJavascriptBridge, that would be easier for you to define same behavior in different platform between Android and iOS. Meanwhile, writing concise code.
## License
This project is licensed under the terms of the MIT license.
没有合适的资源?快使用搜索试试~ 我知道了~
android java and javascript bridge, inspired by wechat web.zip
共45个文件
java:15个
xml:6个
png:4个
需积分: 1 0 下载量 68 浏览量
2024-02-28
21:22:30
上传
评论
收藏 506KB ZIP 举报
温馨提示
android java and javascript bridge, inspired by wechat web.zip
资源推荐
资源详情
资源评论
收起资源包目录
android java and javascript bridge, inspired by wechat web.zip (45个子文件)
JsBridge-master
JsBridge.gif 173KB
gradle.properties 945B
gradle
wrapper
gradle-wrapper.jar 49KB
gradle-wrapper.properties 230B
JsBridge.zip 252KB
.github
workflows
android.yml 273B
library
src
main
assets
WebViewJavascriptBridge.js 7KB
java
com
github
lzyzsd
jsbridge
DefaultHandler.java 189B
Message.java 1KB
OnBridgeCallback.java 109B
WebViewJavascriptBridge.java 235B
BridgeWebView.java 8KB
BridgeUtil.java 3KB
BridgeHandler.java 138B
JSResponse.java 190B
BridgeHelper.java 10KB
BridgeWebViewClient.java 8KB
JSRequest.java 213B
IWebView.java 232B
res
values
strings.xml 70B
AndroidManifest.xml 254B
proguard-rules.pro 647B
build.gradle 1KB
.gitignore 7B
gradlew.bat 2KB
build.gradle 835B
settings.gradle 31B
gradlew 5KB
.gitignore 701B
example
src
main
assets
demo.html 3KB
java
com
github
lzyzsd
jsbridge
example
MainJavascriptInterface.java 1KB
MainActivity.java 4KB
CustomWebView.java 4KB
res
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-hdpi
ic_launcher.png 3KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
values
strings.xml 125B
styles.xml 194B
layout
activity_main.xml 735B
AndroidManifest.xml 752B
proguard-rules.pro 647B
build.gradle 703B
.gitignore 7B
README.md 5KB
共 45 条
- 1
资源评论
日刷百题
- 粉丝: 5320
- 资源: 951
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 产品说明书翻译及练习(1).pdf 产品说明书翻译及练习(1).pdf
- 【图书馆预约】个人版(仅个人使用)
- xcap,好用的发包工具
- kouzhao-main-pycharm官网
- 太原理工大学在项目管理方面涉及多个领域和层面 以下是对太原理工大学项目管理的一些概述: 实验室建设项目管理:太原理工大学制定了
- python 数据分析示例
- 一分钟计数绷踢.mp4
- intel-visual-fortran-xe2011.zip
- tensorflow-gpu-2.5.3-cp37-cp37m-manylinux2010-x86-64.whl
- tensorflow-gpu-2.2.1-cp35-cp35m-win-amd64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功