uniapp App 端渲染后端传来的完整html 字符串

308 阅读1分钟

核心NJS

/**
 * 向本地文件根目录路径下写入文件
 * @param {Object} fileName 文件名	
 * @param {Object} extension 文件扩展名
 * @param {Object} content	文件内容
 * @return {Promise} 返回包含文件路径的promise
 */
writFile(fileName, extension, content) {
        const that = this
        const fileFullName = `${fileName}.${extension}`
        return new Promise((resolve, reject) => {
            plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fobject) {
            // 判断文件是否存在,存在则删除
            that.existFile(fobject, fileFullName)
            // 写
            fobject.root.getFile(fileFullName, {
                    create: true
            }, function(fileEntry) {
                fileEntry.file(function(file) {
                    resolve(file.fullPath)
                    // 创建文件写入对象,并开始写入数据
                    fileEntry.createWriter(function(writer) {
                        // 设置文件大小
                        writer.seek(file.size - 1)
                        // 写入文件内容
                        writer.write(content)
                    }, function(err) {
                        reject(err)
                    })
                })
            })
        })
    })
}
/**
 * 根据文件系统根目录判断文件是否存在
 * @param {PluseIoFileSystem} fobject 文件系统对象
 * @param {String} fileFullName 文件全名
 */
existFile(fobject, fileFullName) {
    const directoryReader = fobject.root.createReader()
    directoryReader.readEntries(function(entries) {
        console.log('当前文件列表', entries)
        entries.forEach(item => {
            // console.log(item.name);
            if(item.name === fileFullName) {
                item.remove()
            }
        })
    })
}

根据writFile方法返回的文件路径 直接丢给web-view组件

注意html中script 标签一定要有结束符 并且结束符的斜杆需要转义

目前只能解决app 端此类问题,最好的方法还是让后端保存html文件,然后传个url 过来