标签 - 微信小程序

微信小程序    2019-07-08 14:30:02    152    0    0
      前一阵子写了个小程序,调试的时候直接用console.log去输出,发现当我想要去掉输出的时候,得把所有console.log的地方都删除掉,想调试又得加回来,各种不方便,为了能更方便的调试,网上找了一堆代码,前半段都对,但输出的调试,不能直接定位到调用的那行,于是尝试自己更改了下,完美解决。有需要的朋友可以试试。
App({
        getStackTrace : function () {
        var obj = {};
        Error.captureStackTrace(obj, this.getStackTrace);
        return obj.stack;
    },
    log : function() {
        var stack = this.getStackTrace() || ""
        var matchResult = stack.split("at ");
 
        var line = matchResult[5] || ""
        for (var i in arguments) {
        }
        if (typeof arguments[i] == 'object') {
            arguments[i] = JSON.stringify(arguments[i])
        }
        arguments[i] += " " + line.replace("Object.", "").replace("(", "").replace(")", "");
      console.log.apply(console, arguments)
    }
})
 
使用方法:
 
const app = getApp()
app.log("这是Debug,点击查看调试位置")
 
 
小程序 微信小程序    2019-06-05 11:03:07    41    0    0

 

GitHub 上使用 JavaScript 来生成公钥私钥对的库:https://github.com/travist/jsencrypt/

修改库

但是在微信小程序中,引入这个库会报这样的错误
 
 

原因是这个第三方库使用了 window 对象,而微信小程序的页面的脚本逻辑是在 JsCore 中运行,JsCore 是一个没有窗口对象的环境,所以不能在脚本中使用 window,也无法在脚本中操作组件。

经过了一段时间的挣扎,终于找到了解决方法:

  1. 给第三方库添加 window2 和 navigator2 变量
  2. 将程序中用到 window 和 navigator 的地方进行全局替换 为window2 和 navigator2。
(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
    typeof define === 'function' && define.amd ? define(['exports'], factory) :
    (factory((global.JSEncrypt = {})));
}(this, (function (exports) { 'use strict';
//--------------------- 这里开始添加---------------------
  // 用来替换 navigator
  var navigator2 = {
    appName: 'Netscape',
    userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
  };
  //  用来替换window
  var window2 = {
    ASN1: null,
    Base64: null,
    Hex: null,
    crypto: null,
    href: null
  };
//-------------