Skip to content

Commit ca704d7

Browse files
committed
1.upgrade AGP
2.upgrade demo 3.upgrade version to 1.0.7
1 parent 78d31db commit ca704d7

11 files changed

Lines changed: 61 additions & 23 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ v1.0.4
2626
1.新增局部JS桥注册,针对于页面级别的JS桥新增以及局部可替换全局JS桥;
2727
2.优化返回数据特殊字符处理
2828

29+
v1.0.7
30+
31+
1.嵌入JS会根据H5传入的参数类型进行判断,如果为字符串则直接使用,如果为object则会转换为String传递,避免出现H5传递字符串出现两层引号问题;
2932

3033

3134

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#### JSBridge-Android
2-
[![Download](https://img.shields.io/badge/Download-1.0.6-brightgreen.svg)](https://search.maven.org/artifact/com.smallbuer/jsbridge/) [![Release Version](https://img.shields.io/badge/release-1.0.6-red.svg)](https://github.com/smallbuer/JSBridge-Android/releases) [![Maven Central](https://img.shields.io/badge/Maven%20Central-1.0.6-brightgreen.svg)](https://search.maven.org/artifact/com.smallbuer/jsbridge/1.0.6/aar) [![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](https://github.com/smallbuer/JSBridge-Android)
2+
[![Download](https://img.shields.io/badge/Download-1.0.7-brightgreen.svg)](https://search.maven.org/artifact/com.smallbuer/jsbridge/) [![Release Version](https://img.shields.io/badge/release-1.0.7-red.svg)](https://github.com/smallbuer/JSBridge-Android/releases) [![Maven Central](https://img.shields.io/badge/Maven%20Central-1.0.7-brightgreen.svg)](https://search.maven.org/artifact/com.smallbuer/jsbridge/1.0.7/aar) [![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](https://github.com/smallbuer/JSBridge-Android)
33

44
### 简介
55

@@ -10,6 +10,7 @@
1010
不再使用URL SHEME拦截方式,直接采用webview的addJavaScriptInterface,此方法根据Android源码跟踪,是目前采用webview方案js与原生交互效率最高的一种系统实现;
1111
对于API小于17的使用者,1.0.3版本将支持版本降低到14,满足一些朋友的需要;
1212
在1.0.6将BridgeWebViewClient设置为Public,方便业务层进行拦截URL处理;
13+
在1.0.7中注入的JS文件会对H5调用JS桥传递的参数进行校验,避免两层引号问题;
1314

1415
为了安全主要实现方式利用onJsPrompt方法让H5可以和原生进行交互,并且移除了低版本的三个危险漏洞;
1516
```
@@ -41,7 +42,7 @@ repositories {
4142
```
4243
4344
dependencies {
44-
implementation 'com.smallbuer:jsbridge:1.0.6'
45+
implementation 'com.smallbuer:jsbridge:1.0.7'
4546
}
4647
```
4748

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ dependencies {
3434
implementation fileTree(dir: 'libs', include: ['*.jar'])
3535

3636
// implementation project(':jsbridge')
37-
implementation 'com.smallbuer:jsbridge:1.0.6'
37+
implementation 'com.smallbuer:jsbridge:1.0.7'
3838

3939
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
4040
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

app/src/main/assets/jsbridge/demo.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@
3939
var str1 = document.getElementById("text1").value;
4040
var str2 = document.getElementById("text2").value;
4141

42-
var data = {url: 'www.baidu.com', userName: str1, passwd: str2};
42+
//var data = {url: 'www.baidu.com', userName: str1, passwd: str2};
43+
var data = '{"name":"张三","age":18,"gender":"男"}'
4344
window.WebViewJavascriptBridge.callHandler('request',
4445
data
4546
, function(responseData) {

app/src/main/java/com/smallbuer/jsbridge/demo/handlers/RequestBridgeHandler.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
import com.smallbuer.jsbridge.core.BridgeLog;
88
import com.smallbuer.jsbridge.core.CallBackFunction;
99

10+
import org.json.JSONException;
11+
import org.json.JSONObject;
12+
1013
public class RequestBridgeHandler extends BridgeHandler {
1114

1215
private String TAG = "RequestBridgeHandler";
@@ -16,6 +19,14 @@ public void handler(Context context,String data, CallBackFunction function) {
1619

1720
BridgeLog.d(TAG,"data->"+data+",Thread is "+Thread.currentThread().getName());
1821

22+
try {
23+
JSONObject jsonObject = new JSONObject(data);
24+
BridgeLog.d(TAG,"jsonObject->"+jsonObject.toString()+",Thread is "+Thread.currentThread().getName());
25+
} catch (JSONException e) {
26+
e.printStackTrace();
27+
}
28+
29+
1930
//a network request .....
2031
//callback
2132
Toast.makeText(context,"request data :"+data,Toast.LENGTH_SHORT).show();

build.gradle

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
buildscript {
44
ext.kotlin_version = '1.7.10'
55
repositories {
6-
maven { url 'https://maven.aliyun.com/repository/central' }
7-
maven { url 'https://maven.aliyun.com/repository/jcenter' }
8-
maven { url 'https://maven.aliyun.com/repository/google' }
9-
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
10-
maven { url 'https://maven.aliyun.com/repository/public' }
6+
// maven { url 'https://maven.aliyun.com/repository/central' }
7+
// maven { url 'https://maven.aliyun.com/repository/jcenter' }
8+
// maven { url 'https://maven.aliyun.com/repository/google' }
9+
// maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
10+
// maven { url 'https://maven.aliyun.com/repository/public' }
1111
google()
1212
mavenCentral()
1313
maven { url 'https://jitpack.io' }
@@ -24,11 +24,11 @@ buildscript {
2424

2525
allprojects {
2626
repositories {
27-
maven { url 'https://maven.aliyun.com/repository/central' }
28-
maven { url 'https://maven.aliyun.com/repository/jcenter' }
29-
maven { url 'https://maven.aliyun.com/repository/google' }
30-
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
31-
maven { url 'https://maven.aliyun.com/repository/public' }
27+
// maven { url 'https://maven.aliyun.com/repository/central' }
28+
// maven { url 'https://maven.aliyun.com/repository/jcenter' }
29+
// maven { url 'https://maven.aliyun.com/repository/google' }
30+
// maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
31+
// maven { url 'https://maven.aliyun.com/repository/public' }
3232
google()
3333
mavenCentral()
3434
maven { url 'https://jitpack.io' }

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ android.enableJetifier=true
2222
kotlin.code.style=official
2323

2424

25-
VERSION_NAME=1.0.6
26-
VERSION_CODE=106
25+
VERSION_NAME=1.0.7
26+
VERSION_CODE=107
2727
GROUP=com.smallbuer
2828

2929
POM_DESCRIPTION=A solution for safe and fast interaction between js and native£¬it's minimum support API 14

jsbridge/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ dependencies {
3535
ext {
3636
// These could be set globally
3737
PUBLISH_GROUP_ID = 'com.smallbuer'
38-
PUBLISH_VERSION = '1.0.6'
38+
PUBLISH_VERSION = '1.0.7'
3939

4040
// These should be module-dependent
4141
PUBLISH_ARTIFACT_ID = 'jsbridge'

jsbridge/src/main/java/com/smallbuer/jsbridge/core/BridgeUtil.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,20 @@ public class BridgeUtil {
2727
public final static String UNDERLINE_STR = "_";
2828
//Version greater than or equal to 17
2929
public final static String WebviewJavascriptBridge =
30-
"(function(){if(window.WebViewJavascriptBridge){return}var receiveMessageQueue=[];var messageHandlers={};var responseCallbacks={};var uniqueId=1;function init(messageHandler){if(WebViewJavascriptBridge._messageHandler){throw new Error('WebViewJavascriptBridge.init called twice');}WebViewJavascriptBridge._messageHandler=messageHandler;var receivedMessages=receiveMessageQueue;receiveMessageQueue=null;for(var i=0;i<receivedMessages.length;i++){_dispatchMessageFromNative(receivedMessages[i])}}function send(data,responseCallback){_doSend('jsbridge','send',data,responseCallback)}function registerHandler(handlerName,handler){messageHandlers[handlerName]=handler}function callHandler(handlerName,data,responseCallback){_doSend('jsbridge',handlerName,data,responseCallback)}function callHandlerWithModule(moduleName,handlerName,data,responseCallback){_doSend(moduleName,handlerName,data,responseCallback)}function _doSend(moduleName,handlerName,message,responseCallback){var callbackId;if(typeof responseCallback==='string'){callbackId=responseCallback}else if(responseCallback){callbackId='cb_'+(uniqueId++)+'_'+new Date().getTime();responseCallbacks[callbackId]=responseCallback}else{callbackId=''}try{var evalStr1='window.'+moduleName+'.';if(moduleName=='jsbridge'&&handlerName!='response'){evalStr1+='handler'}else{evalStr1+=handlerName}var fn=eval(evalStr1)}catch(e){console.log(e)}if(typeof fn==='function'){var evalStr='window.'+moduleName;var fnwindow=eval(evalStr);var responseData;if(moduleName=='jsbridge'&&handlerName!='response'){responseData=fn.call(fnwindow,handlerName,JSON.stringify(message),callbackId)}else{responseData=fn.call(fnwindow,JSON.stringify(message),callbackId)}if(responseData){responseCallback=responseCallbacks[callbackId];if(!responseCallback){return}responseCallback(responseData);delete responseCallbacks[callbackId]}}}function _dispatchMessageFromNative(messageJSON){setTimeout(function(){var message=JSON.parse(messageJSON);var responseCallback;if(message.responseId){responseCallback=responseCallbacks[message.responseId];if(!responseCallback){return}responseCallback(message.responseData);delete responseCallbacks[message.responseId]}else{if(message.callbackId){var callbackResponseId=message.callbackId;responseCallback=function(responseData){_doSend('jsbridge','response',responseData,callbackResponseId)}}var handler=WebViewJavascriptBridge._messageHandler;if(message.handlerName){handler=messageHandlers[message.handlerName]}try{handler(message.data,responseCallback)}catch(exception){if(typeof console!='undefined'){console.log(\"WebViewJavascriptBridge: WARNING: javascript handler threw.\",message,exception)}}}})}function _handleMessageFromNative(messageJSON){if(receiveMessageQueue){receiveMessageQueue.push(messageJSON)}_dispatchMessageFromNative(messageJSON)}var WebViewJavascriptBridge=window.WebViewJavascriptBridge={init:init,send:send,registerHandler:registerHandler,callHandler:callHandler,callHandlerWithModule:callHandlerWithModule,_handleMessageFromNative:_handleMessageFromNative};console.log(\"start jsbridge ...\");var doc=document;var readyEvent=doc.createEvent('Events');readyEvent.initEvent('WebViewJavascriptBridgeReady');readyEvent.bridge=WebViewJavascriptBridge;doc.dispatchEvent(readyEvent);console.log(\"end jsbridge ...\")})();";
30+
"(function(){if(window.WebViewJavascriptBridge){return}var receiveMessageQueue=[];var messageHandlers={};var responseCallbacks={};var uniqueId=1;function init(messageHandler){if(WebViewJavascriptBridge._messageHandler){throw new Error('WebViewJavascriptBridge.init called twice');}WebViewJavascriptBridge._messageHandler=messageHandler;var receivedMessages=receiveMessageQueue;receiveMessageQueue=null;for(var i=0;i<receivedMessages.length;i++){_dispatchMessageFromNative(receivedMessages[i])}}function send(data,responseCallback){_doSend('jsbridge','send',data,responseCallback)}function registerHandler(handlerName,handler){messageHandlers[handlerName]=handler}function callHandler(handlerName,data,responseCallback){_doSend('jsbridge',handlerName,data,responseCallback)}function callHandlerWithModule(moduleName,handlerName,data,responseCallback){_doSend(moduleName,handlerName,data,responseCallback)}function _doSend(moduleName,handlerName,message,responseCallback){var callbackId;if(typeof responseCallback==='string'){callbackId=responseCallback}else if(responseCallback){callbackId='cb_'+(uniqueId++)+'_'+new Date().getTime();responseCallbacks[callbackId]=responseCallback}else{callbackId=''}try{var evalStr1='window.'+moduleName+'.';if(moduleName=='jsbridge'&&handlerName!='response'){evalStr1+='handler'}else{evalStr1+=handlerName}var fn=eval(evalStr1)}catch(e){console.log(e)}if(typeof fn==='function'){var evalStr='window.'+moduleName;var fnwindow=eval(evalStr);var responseData;var lastMessage;\n" +
31+
" if(typeof message === 'string'){\n" +
32+
" lastMessage = message;\n" +
33+
" }else{\n" +
34+
" lastMessage = JSON.stringify(message);\n" +
35+
" };if(moduleName=='jsbridge'&&handlerName!='response'){responseData=fn.call(fnwindow,handlerName,lastMessage,callbackId)}else{responseData=fn.call(fnwindow,lastMessage,callbackId)}if(responseData){responseCallback=responseCallbacks[callbackId];if(!responseCallback){return}responseCallback(responseData);delete responseCallbacks[callbackId]}}}function _dispatchMessageFromNative(messageJSON){setTimeout(function(){var message=JSON.parse(messageJSON);var responseCallback;if(message.responseId){responseCallback=responseCallbacks[message.responseId];if(!responseCallback){return}responseCallback(message.responseData);delete responseCallbacks[message.responseId]}else{if(message.callbackId){var callbackResponseId=message.callbackId;responseCallback=function(responseData){_doSend('jsbridge','response',responseData,callbackResponseId)}}var handler=WebViewJavascriptBridge._messageHandler;if(message.handlerName){handler=messageHandlers[message.handlerName]}try{handler(message.data,responseCallback)}catch(exception){if(typeof console!='undefined'){console.log(\"WebViewJavascriptBridge: WARNING: javascript handler threw.\",message,exception)}}}})}function _handleMessageFromNative(messageJSON){if(receiveMessageQueue){receiveMessageQueue.push(messageJSON)}_dispatchMessageFromNative(messageJSON)}var WebViewJavascriptBridge=window.WebViewJavascriptBridge={init:init,send:send,registerHandler:registerHandler,callHandler:callHandler,callHandlerWithModule:callHandlerWithModule,_handleMessageFromNative:_handleMessageFromNative};console.log(\"start jsbridge ...\");var doc=document;var readyEvent=doc.createEvent('Events');readyEvent.initEvent('WebViewJavascriptBridgeReady');readyEvent.bridge=WebViewJavascriptBridge;doc.dispatchEvent(readyEvent);console.log(\"end jsbridge ...\")})();";
3136

3237
//Version lower than 17 used
3338
public final static String WebviewJavascriptBridgeMin =
34-
"(function(){if(window.WebViewJavascriptBridge){return}var receiveMessageQueue=[];var messageHandlers={};var responseCallbacks={};var uniqueId=1;function init(messageHandler){if(WebViewJavascriptBridge._messageHandler){throw new Error('WebViewJavascriptBridge.init called twice');}WebViewJavascriptBridge._messageHandler=messageHandler;var receivedMessages=receiveMessageQueue;receiveMessageQueue=null;for(var i=0;i<receivedMessages.length;i++){_dispatchMessageFromNative(receivedMessages[i])}}function send(data,responseCallback){_doSend('jsbridge','send',data,responseCallback)}function registerHandler(handlerName,handler){messageHandlers[handlerName]=handler}function callHandler(handlerName,data,responseCallback){_doSend('jsbridge',handlerName,data,responseCallback)}function callHandlerWithModule(moduleName,handlerName,data,responseCallback){_doSend(moduleName,handlerName,data,responseCallback)}function _doSend(moduleName,handlerName,message,responseCallback){var callbackId;if(typeof responseCallback==='string'){callbackId=responseCallback}else if(responseCallback){callbackId='cb_'+(uniqueId++)+'_'+new Date().getTime();responseCallbacks[callbackId]=responseCallback}else{callbackId=''}if(moduleName=='jsbridge'&&handlerName!='response'){prompt('{\\\"handlerName\\\":'+handlerName+',\\\"data\\\":'+JSON.stringify(message)+',\\\"callbackId\\\":'+callbackId+'}')}else{prompt('{\\\"data\\\":'+JSON.stringify(message)+',\\\"callbackId\\\":'+callbackId+'}')}}function _dispatchMessageFromNative(messageJSON){setTimeout(function(){var message=JSON.parse(messageJSON);var responseCallback;if(message.responseId){responseCallback=responseCallbacks[message.responseId];if(!responseCallback){return}responseCallback(message.responseData);delete responseCallbacks[message.responseId]}else{if(message.callbackId){var callbackResponseId=message.callbackId;responseCallback=function(responseData){_doSend('jsbridge','response',responseData,callbackResponseId)}}var msgData=message.data;var handler=WebViewJavascriptBridge._messageHandler;if(message.handlerName){handler=messageHandlers[message.handlerName]}try{handler(msgData,responseCallback)}catch(exception){if(typeof console!='undefined'){console.log(\"WebViewJavascriptBridge: WARNING: javascript handler threw.\",message,exception)}}}})}function _handleMessageFromNative(messageJSON){if(receiveMessageQueue){receiveMessageQueue.push(messageJSON)}_dispatchMessageFromNative(messageJSON)}var WebViewJavascriptBridge=window.WebViewJavascriptBridge={init:init,send:send,registerHandler:registerHandler,callHandler:callHandler,callHandlerWithModule:callHandlerWithModule,_handleMessageFromNative:_handleMessageFromNative};console.log(\"start jsbridge ...\");var doc=document;var readyEvent=doc.createEvent('Events');readyEvent.initEvent('WebViewJavascriptBridgeReady');readyEvent.bridge=WebViewJavascriptBridge;doc.dispatchEvent(readyEvent);console.log(\"end jsbridge ...\")})();";
39+
"(function(){if(window.WebViewJavascriptBridge){return}var receiveMessageQueue=[];var messageHandlers={};var responseCallbacks={};var uniqueId=1;function init(messageHandler){if(WebViewJavascriptBridge._messageHandler){throw new Error('WebViewJavascriptBridge.init called twice');}WebViewJavascriptBridge._messageHandler=messageHandler;var receivedMessages=receiveMessageQueue;receiveMessageQueue=null;for(var i=0;i<receivedMessages.length;i++){_dispatchMessageFromNative(receivedMessages[i])}}function send(data,responseCallback){_doSend('jsbridge','send',data,responseCallback)}function registerHandler(handlerName,handler){messageHandlers[handlerName]=handler}function callHandler(handlerName,data,responseCallback){_doSend('jsbridge',handlerName,data,responseCallback)}function callHandlerWithModule(moduleName,handlerName,data,responseCallback){_doSend(moduleName,handlerName,data,responseCallback)}function _doSend(moduleName,handlerName,message,responseCallback){var callbackId;if(typeof responseCallback==='string'){callbackId=responseCallback}else if(responseCallback){callbackId='cb_'+(uniqueId++)+'_'+new Date().getTime();responseCallbacks[callbackId]=responseCallback}else{callbackId=''};var lastMessage;\n" +
40+
" if(typeof message === 'string'){\n" +
41+
" lastMessage = message;\n" +
42+
" }else{\n" +
43+
" lastMessage = JSON.stringify(message);\n" +
44+
" }if(moduleName=='jsbridge'&&handlerName!='response'){prompt('{\\\"handlerName\\\":'+handlerName+',\\\"data\\\":'+lastMessage+',\\\"callbackId\\\":'+callbackId+'}')}else{prompt('{\\\"data\\\":'+lastMessage+',\\\"callbackId\\\":'+callbackId+'}')}}function _dispatchMessageFromNative(messageJSON){setTimeout(function(){var message=JSON.parse(messageJSON);var responseCallback;if(message.responseId){responseCallback=responseCallbacks[message.responseId];if(!responseCallback){return}responseCallback(message.responseData);delete responseCallbacks[message.responseId]}else{if(message.callbackId){var callbackResponseId=message.callbackId;responseCallback=function(responseData){_doSend('jsbridge','response',responseData,callbackResponseId)}}var msgData=message.data;var handler=WebViewJavascriptBridge._messageHandler;if(message.handlerName){handler=messageHandlers[message.handlerName]}try{handler(msgData,responseCallback)}catch(exception){if(typeof console!='undefined'){console.log(\"WebViewJavascriptBridge: WARNING: javascript handler threw.\",message,exception)}}}})}function _handleMessageFromNative(messageJSON){if(receiveMessageQueue){receiveMessageQueue.push(messageJSON)}_dispatchMessageFromNative(messageJSON)}var WebViewJavascriptBridge=window.WebViewJavascriptBridge={init:init,send:send,registerHandler:registerHandler,callHandler:callHandler,callHandlerWithModule:callHandlerWithModule,_handleMessageFromNative:_handleMessageFromNative};console.log(\"start jsbridge ...\");var doc=document;var readyEvent=doc.createEvent('Events');readyEvent.initEvent('WebViewJavascriptBridgeReady');readyEvent.bridge=WebViewJavascriptBridge;doc.dispatchEvent(readyEvent);console.log(\"end jsbridge ...\")})();";
3545

3646
}

0 commit comments

Comments
 (0)