Skip to content

Commit

Permalink
fix: window.atob 不支持 unicode 问题
Browse files Browse the repository at this point in the history
  • Loading branch information
hcanyz committed Apr 22, 2021
1 parent 14ed439 commit 3ddea8f
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 11 deletions.
8 changes: 7 additions & 1 deletion ZJsBridge/src/main/assets/jsapi/zfjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,12 @@
isIOS: function () {
let reg = /iphone|ipad|ipod/i
if (reg.test(window.navigator.userAgent)) { return true } else { return false }
},
b64DecodeUnicode: function (str) {
// Going backwards: from bytestream, to percent-encoding, to original string.
return decodeURIComponent(atob(str).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
}

Expand Down Expand Up @@ -337,7 +343,7 @@

var msg = JSON.parse(msgStr)

var msgWrapStr = window.atob(msg[_JSON_MESSAGE])
var msgWrapStr = zfHelper.b64DecodeUnicode(msg[_JSON_MESSAGE])
var msgWrap = JSON.parse(msgWrapStr)
var shaStr = msg[_SHA_KEY]
var arr = new Array
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class ZJsCallBacker(private val bridgeMessage: ZBridgeMessage, private val izWeb
doHandle(resultObj = jsonObject)
}

fun success(jsonObject: JSONObject) {
fun success(jsonObject: JSONObject = JSONObject()) {
jsonObject.put("errCode", CODE_SUCCESS)
doHandle(resultObj = jsonObject)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ private void init() {
addJavascriptInterface(new ZJavascriptInterface(this), ZJavascriptInterface.INTERFACE_NAME);
}

private ZWebHelper zWebHelper = new ZWebHelper(this);
private final ZWebHelper zWebHelper = new ZWebHelper(this);

@Override
public void execJs(@NotNull String methodName, @Nullable String params, @Nullable ValueCallback<String> valueCallback) {
Expand All @@ -62,12 +62,7 @@ public void execJs(@NotNull String methodName, @Nullable String params, @Nullabl

@Override
public void execJs(@NotNull final String sourceJs, @Nullable final ValueCallback<String> valueCallback) {
runOnMainThread(new Runnable() {
@Override
public void run() {
evaluateJavascript(sourceJs, valueCallback);
}
});
runOnMainThread(() -> evaluateJavascript(sourceJs, valueCallback));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.hcanyz.zjsbridge.cotainer.IZWebViewContainer
import com.hcanyz.zjsbridge.handler.ZCommonJsHandler
import com.hcanyz.zjsbridge.jshandlerimpl.image.ImageJsHandler
import com.hcanyz.zjsbridge.test.R
import com.hcanyz.zjsbridge.test.test.TestJsHandler
import kotlinx.android.synthetic.main.activity_test_web_view.*

class TestWebViewActivity : AppCompatActivity(), IZWebViewContainer {
Expand All @@ -16,10 +17,11 @@ class TestWebViewActivity : AppCompatActivity(), IZWebViewContainer {

setContentView(R.layout.activity_test_web_view)

web_test.loadUrl("file:///android_asset/index.html")
web_test.loadUrl("http://192.168.253.2:8080")

web_test.getCurZWebHelper().registeredJsApiHandler(this, ZCommonJsHandler::class.java)
web_test.getCurZWebHelper().registeredJsApiHandler(this, ImageJsHandler::class.java)
web_test.getCurZWebHelper().registeredJsApiHandler(this, TestJsHandler::class.java)
}

override fun closeWindow() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.hcanyz.zjsbridge.cotainer.IZWebViewContainer
import com.hcanyz.zjsbridge.handler.ZCommonJsHandler
import com.hcanyz.zjsbridge.jshandlerimpl.image.ImageJsHandler
import com.hcanyz.zjsbridge.test.R
import com.hcanyz.zjsbridge.test.test.TestJsHandler
import kotlinx.android.synthetic.main.fragmenttest_web_view.*

class TestWebViewFragment : Fragment(), IZWebViewContainer {
Expand All @@ -26,6 +27,7 @@ class TestWebViewFragment : Fragment(), IZWebViewContainer {

web_test.getCurZWebHelper().registeredJsApiHandler(this, ZCommonJsHandler::class.java)
web_test.getCurZWebHelper().registeredJsApiHandler(this, ImageJsHandler::class.java)
web_test.getCurZWebHelper().registeredJsApiHandler(this, TestJsHandler::class.java)

requireActivity().onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
Expand Down
25 changes: 25 additions & 0 deletions app/src/main/java/com/hcanyz/zjsbridge/test/test/TestJsHandler.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.hcanyz.zjsbridge.test.test

import android.widget.Toast
import com.hcanyz.zjsbridge.bridge.ZJsCallBacker
import com.hcanyz.zjsbridge.handler.ZBaseJsApiHandler
import org.json.JSONObject

class TestJsHandler : ZBaseJsApiHandler() {

override fun handleApi(apiName: String, params: String, jsCallBacker: ZJsCallBacker): Boolean {
when (apiName) {
"_test_unicode_params_and_result" -> {
val activity = getActivity() ?: return true

Toast.makeText(activity, params, Toast.LENGTH_LONG).show()

val result = JSONObject()
result.put("unicodeResult", "中文 Emoji 😂🤣")
jsCallBacker.success(result)
return true
}
}
return false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.hcanyz.zjsbridge.cotainer.IZWebViewContainer
import com.hcanyz.zjsbridge.handler.ZCommonJsHandler
import com.hcanyz.zjsbridge.jshandlerimpl.image.ImageJsHandler
import com.hcanyz.zjsbridge.test.R
import com.hcanyz.zjsbridge.test.test.TestJsHandler
import kotlinx.android.synthetic.main.activity_test_x5_web_view.*

class TestX5WebViewActivity : AppCompatActivity(), IZWebViewContainer {
Expand All @@ -19,8 +20,9 @@ class TestX5WebViewActivity : AppCompatActivity(), IZWebViewContainer {

x5web_test.loadUrl("file:///android_asset/index.html")

x5web_test.getCurZWebHelper().registeredJsApiHandler(this, ZCommonJsHandler())
x5web_test.getCurZWebHelper().registeredJsApiHandler(this, ZCommonJsHandler::class.java)
x5web_test.getCurZWebHelper().registeredJsApiHandler(this, ImageJsHandler::class.java)
x5web_test.getCurZWebHelper().registeredJsApiHandler(this, TestJsHandler::class.java)
}

override fun onResume() {
Expand Down

0 comments on commit 3ddea8f

Please sign in to comment.