小程序不能使用window.abot和window.btoa

小程序不能使用window.abot和window.btoa

最近做小程序项目,用到gzip压缩解压缩,使用了pako.js的gzip压缩,后台数据返回后需要解压,网上找到一个方法但是需要用到window的atob方法,小程序并不支持window对象,因此找了一通,在github上找到解决方法,记录一下

解压缩

const unzip = (b64Data) => {
  var strData = atob(b64Data);
  // Convert binary string to character-number array
  var charData = strData.split('').map(function (x) { return x.charCodeAt(0); });
  // Turn number array into byte-array
  var binData = new Uint8Array(charData);
  // // unzip
  var data = pako.inflate(binData);
  // Convert gunzipped byteArray back to ascii string:
  //二进制转成字符串
  function byteToString(arr) {
    if (typeof arr === 'string') {
      return arr;
    }
    var str = '',
      _arr = arr;
    for (var i = 0; i < _arr.length; i++) {
      var one = _arr[i].toString(2),
        v = one.match(/^1+?(?=0)/);
      if (v && one.length == 8) {
        var bytesLength = v[0].length;
        var store = _arr[i].toString(2).slice(7 - bytesLength);
        for (var st = 1; st < bytesLength; st++) {
          store += _arr[st + i].toString(2).slice(2);
        }
        str += String.fromCharCode(parseInt(store, 2));
        i += bytesLength - 1;
      } else {
        str += String.fromCharCode(_arr[i]);
      }
    }
    return str;
  }
  strData = byteToString(data)
  return strData;
}

如上图所示,abot真机调试时报abot is undefined
解决方法github地址:https://github.com/davidchambers/Base64.js#readme
因为我改了文件名字所以引用如下:

const polyfill = require('../libs/abot.min.js')
// 这里是引用
const {atob} = polyfill;
// 如果你需要用btoa
const {atob,btoa} = polyfill;

完啦~

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的ROS发布robot topic的Python程序示例: ``` python #!/usr/bin/env python import rospy from geometry_msgs.msg import Twist def publisher(): # 创建一个名为"robot_cmd_vel"的topic,Twist类型的消息 pub = rospy.Publisher('robot_cmd_vel', Twist, queue_size=10) # 初始化ROS节点 rospy.init_node('robot_publisher', anonymous=True) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): # 发布消息 cmd_vel = Twist() cmd_vel.linear.x = 0.5 # 设定机器人的线速度 cmd_vel.angular.z = 0.2 # 设定机器人的角速度 rospy.loginfo(cmd_vel) pub.publish(cmd_vel) rate.sleep() if __name__ == '__main__': try: publisher() except rospy.ROSInterruptException: pass ``` 这个程序通过ROS发布了一个名为"robot_cmd_vel"的topic,类型为Twist。程序中使用了rospy.Publisher()函数创建了一个发布者对象,用于发布消息。在while循环中,程序通过pub.publish()函数发布了一个Twist类型的消息,并休眠一段时间。程序中使用了rospy.loginfo()函数输出日志信息。 在运行这个程序之前,需要先确保ROS master已经启动,可以使用以下命令启动ROS master: ``` roscore ``` 然后,运行这个Python程序,使用以下命令: ``` rosrun <package_name> <node_name>.py ``` 其中,<package_name>是程序所在的ROS包的名称,<node_name>是程序的名称。例如,如果这个程序保存在名为"my_ros_package"的ROS包中,程序名称为"my_publisher.py",则可以使用以下命令运行程序: ``` rosrun my_ros_package my_publisher.py ``` 程序运行后,会在ROS中创建一个名为"robot_cmd_vel"的topic,并发布消息。其他的ROS节点可以订阅这个topic,接收发布的消息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值