各种JS引擎参考:
https://neyoufan.github.io/2016/12/23/android/Android Js引擎/在Android上使用JS引擎是一种什么样的体验?/

AndroidJSCore

https://github.com/ericwlange/AndroidJSCore.git

在应用AndroidJSCore过程中比较忐忑,毕竟只有三百多个star和四十多个fork。在综合考虑后还是应用了AndroidJSCore

AndroidJSCore已知问题

  • 排序
    执行以下语句无法正常排序
  1. String test = "var stores =[1,3,5,2,7,9]; stores.sort(function(a, b){return a > b}); return stores;";

需要把>改为-, 才能正常执行,初步诊断为兼容性问题

  1. String test = "var stores =[1,3,5,2,7,9]; stores.sort(function(a, b){return a - b}); return stores;";
  • 分号问题
    我们引擎中会对要执行的js片段jsCode包一层代码,如下:
  1. JSValue newAValue = jsContext.evaluateScript("(function() {" + jsCode + " return OUT; } ) ();");

这时候如果jsCode的某些代码没有加分号,会导致出错, 如:

  1. if (Page.getValue('__pagestatus') == '1') {
  2. Ctrl.setProperties([controlsSetPropertyTransfer('审批状态', 'hidden', '1'), controlsSetPropertyTransfer('申请日期', 'hidden', '1')])
  3. } else if (Page.getValue('__pagestatus') == '3') {
  4. Ctrl.setProperties([controlsSetPropertyTransfer('审批状态', 'readonly', '1'), controlsSetPropertyTransfer('申请日期', 'readonly', '1'), controlsSetPropertyTransfer('请假类型', 'readonly', '1'), controlsSetPropertyTransfer('开始时间', 'readonly', '1'), controlsSetPropertyTransfer('结束时间', 'readonly', '1'), controlsSetPropertyTransfer('请假时长', 'readonly', '1'), controlsSetPropertyTransfer('备注', 'readonly', '1'), controlsSetPropertyTransfer('图片', 'readonly', '1'), controlsSetPropertyTransfer('附件', 'readonly', '1')])
  5. }