问下各位 Android 大佬, 为什么两个 android App 执行同一个 js,执行结果不同! 我用手机浏览器画的 canvas 转 base64 用 A app 执行 js 画 canvas 转 base64 没问题和浏览器画的一致 用 B app 执行 js 画 canvas 转 base64 和浏览器不一致
执行 js 是用的同样的代码!
1
Jione OP 问下各位 Android 大佬, 为什么两个 android App 执行同一个 js,执行结果不同!
我用手机浏览器画的 canvas 转 base64 用 A app 执行 js 画 canvas 转 base64 没问题和浏览器画的一致 用 B app 执行 js 画 canvas 转 base64 和浏览器不一致 执行 js 是用的同样的代码! |
2
fugui2 2021-10-16 11:14:00 +08:00
show your code
|
4
MonkeyD1 2021-10-16 14:23:02 +08:00
webview 的内核版本不同? webkit 版本内核 之类的
|
5
InDom 2021-10-16 14:35:22 +08:00
之前有个 利用 Canvas 画板计算用户指纹来识别跟踪用户。
|
8
stardust21 2021-10-16 16:26:03 +08:00
原因应该就是 4 楼说的,不同的 APP 用了不同的 webview 内核
|
9
deplivesb 2021-10-16 16:43:57 +08:00 3
到现在也没见到代码,全靠广大网友猜
又一个悬丝诊脉 |
10
damao2250 2021-10-16 17:48:35 +08:00
悬丝诊脉
|
11
Jione OP @stardust21 两个 app 的运行 js 代码
String js = ""; try { InputStream is = null; is = getAssets().open("main.js"); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); js = new String(buffer); } catch (IOException e) { e.printStackTrace(); } JsEvaluator jsEvaluator = new JsEvaluator(this); jsEvaluator.callFunction(js, new JsCallback() { @Override public void onResult(String result) { // Process result here. // This method is called in the UI thread. MyLog.loge("result:"+result); MyLog.log("md5:" + md5(result)); } @Override public void onError(String errorMessage) { MyLog.log("errorMessage:" + errorMessage); // Process JavaScript error here. // This method is called in the UI thread. } }, "webglFp"); |
13
WebKit 2021-10-17 02:01:13 +08:00 via Android
手机版本?还是说同一个手机装的两个 app ?如果是国内的 app,可以试试卸载腾讯系软件,然后卸载重装这两个 app 试试
|
14
ruri 2021-10-17 08:47:52 +08:00
webview 你就别指望不同设备执行结果会一样了,这也是为什么现在很多 APP 会集成腾讯 x5 的主要原因,就是为了让自己的 APP 在每个设备上运行结果相同,减少开发调试精力。
其实较新版本的谷歌官方或 AOSP webview 都没什么毛病,但你架不住有些国内厂商会魔改自己手机系统里的 webview,哪怕是微调一些 webview 的默认参数,都会导致你的代码运行效果和原版大不一样。 |