微信小程序小总结

微信小程序使用起来感受像写h5同样,对于新手估计会有比较多疑惑,若是撇去这些想法应该是很快就能上手的一套开发方案。css

可是它自身的限制也比较大,如不提供window对象会致使一些功能实现起来比较麻烦。我此次开发的小程序就遇到了,虽然比较快找到解决办法(可能都是比较标准化的东西),但愿以后不会有其余大坑。html

须要其实比较简单,就是两页文章列表及文章详情页,刚上手却遇到下面的坑:git

  • 没法利用window对象解析xmles6

  • 不支持HTML标签的使用github

  • 怎样兼容Promise和generator异步json

刚开始一脸懵逼...后来赶忙去github看看各大牛例子及一些工具就解决了。小程序

解析xml问题

因为比较多的解析插件都是基于window.DOMParser处理的,在小程序却无用武之地。找到问题就好解决,我要的是DOMParser而不是window找找应该有代替品,而后找到这个xmldom引入代替掉DOMParser就解决,而后把xml转成json处理了。微信小程序

评论有问道如何改,这里我已经把这个整合到这库了。promise

解析html问题

如今比较成熟的是wxParse这货,的确大部分的html标签均能解析渲染,可是我这边程序录入的富文本内容却掺杂了些奇奇怪怪的标签,解析时仍是会出错,内容解析到一半就停了...既然它作不到忽略,咋整?那把那些垃圾都过滤掉吧!!!立刻用上js-xss这个来处理问题,能控制过滤的标签及标签能拥有的属性,方便得很。微信

const xss = require('../lib/js-xss/xss')
const WxParse = require('../../lib/wxParse/wxParse.js')

//把style及class添加到白名单。
Object.keys(xss.whiteList).forEach(name => xss.whiteList[name] = xss.whiteList[name].concat(['style', 'class']))
let content = xss('<div>HTML文本</div>', Object.assign(xss.whiteList, {
  /**在这添加你的标签白名单**/
  //div: ['style', 'css', 'title']
}))

WxParse.wxParse('wxml', 'html', content, this, 15)

通过上面的代码便能解析出合理的html好让wxParse好好渲染了。

你说引用js-xss文件,对象是个方法都没有,出错了?恩,这里因为dist目录下的xss.js文件并非UMD包裹因此致使引用出错,这里得把整个js-xss项目下载下来并使用browerify从新打包。

browerify lib/index.js > dist/xss.js -s xss

兼容Promise和Generator问题

Promise使用es6-promise打个补丁或者用bluebird

//引入
const Promise = require('../../lib/es6-promise/es6-promise').Promise;
// 或
const Promise = require('../../lib/bluebird/bluebird');

Generator须要regeneratorRuntime,运行环境若是不加上就提示出错。

var Promise = require('../../lib/es6-promise/es6-promise').Promise;
var co = require('../../lib/co/we-index');
var regeneratorRuntime = require("../../lib/regenerator-runtime/runtime");

//获取应用实例
var app = getApp();

Page({


    onReady: function () {
        //console.log('onReady');
        var that = this;

        var gen = function* () {
            var a = Promise.resolve(1);
            var b = Promise.resolve(2);
            var c = Promise.resolve(3);
            var res = yield [a, b, c];
            console.log(res); // 输出:[1, 2, 3]
        };

        co(gen).then(function () {
            console.log('Generator函数执行完毕了'); // 输出:Generator函数执行完毕了
        });       
    }
});

部分引用的库须要稍微改动才能在微信小程序环境使用,想立刻上手可直接使用GyWxappCases 微信小程序案例下的库

相关文章
相关标签/搜索