最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 自制小工具(2):导出模板化的 html 文件

    正文概述 掘金(leiting1998)   2021-04-02   616

    本系列是本人在OPPO工作一年半中,为了解决开发或者运营的困扰,自制的一些小工具合集,特地以文章的形式记录下来,一方面作为自己的知识储备,另一方面期望能够给遇到相同问题的同学一些启发。

    问题

    在我们打开 app 的时候,经常会有很多隐私协议和用户声明的文档,你要同意了才能进入APP,不同版本的文档、不同app 和不同语言,我大概维护了几十篇类似文档,并且经常会因为各种各样的原因,导致需要频繁地更新文档。每次手动去修改 html 很麻烦呀,经常在开发得正爽的时候,产品告诉你,诶,麻烦开发小哥你帮我改一下这段文案。

    头大、心累并且立刻深呼吸一口保证自己精神不会错乱,所以怎样应付众多版本的文档,并且快速修改上线,成了一个急需解决的问题。

    分析

    解决这种模版化,并且只有简单的文字和图片的项目,不就专门为富文本打造的吗?

    • 利用富文本,可以直接将 word 的内容转化为html文本。
    • 导出 html 文本,支持其他开发人员进行二次开发。
    • 导入线上的 html 文本,可以直接在原有的文档基础上进行修改。

    自制小工具(2):导出模板化的 html 文件

    确定了页面需要哪些功能,马上开始动手操作!

    富文本

    很简单,咱们使用一款免费开源的 wangEditor 富文本编辑器就行了,简单初始化一下。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>富文本</title>
        <link rel="stylesheet" href="./editorStyle.css">
    </head>
    <body>
        <select id="tools">
            <button style="margin-bottom: 20px;margin-right: 20px ;float: right;" id="btn">导出html</button>
        <label>
            <input type="text" id="linkUrl" placeholder="请输入想要导入的链接地址">
            <button id="importUrl">导入页面</button>
        </label>
        </select>
        
        <section class="main-wrap">
            <div id="main"></div>
        </section>
        
        <script type="text/javascript" src="./wangEditor.min.js"></script>
        <script type="text/javascript">
            var editor = new window.wangEditor('#main')
            var config = editor.customConfig ? editor.customConfig : editor.config;
            config.uploadImgShowBase64 = true
            editor.config.height = 800
            editor.create()
        </script>
    </body>
    </html>
    

    页面内主要有一个富文本展示区域,和工具区域(导入线上链接和导出html按钮)。

    导出 html 文件

    因为,页面可能不止一个团队使用,每个团队有自己的要求,那么需要导出 html 页面便于进行二次开发。

    var funDownload = function (content, filename) {
        var eleLink = document.createElement('a');
        eleLink.download = filename;
        eleLink.style.display = 'none';
        
        var blob = new Blob([content]);
        eleLink.href = URL.createObjectURL(blob);
        
        document.body.appendChild(eleLink);
        eleLink.click();
        document.body.removeChild(eleLink);
    };
    
    document.getElementById('btn').addEventListener('click', function () {
        var html = '<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>Document</title><link rel=\"stylesheet\"href=\"http://activity-cdo.heytapimage.com/cdo-activity/static/202102/03/maincopy20210203.css\"></head><body>{{content}}</body></html>';
    
        var content = document.getElementsByClassName('w-e-text')[0].innerHTML;
    
        funDownload(html.replace('{{content}}', content), 'result.html')
    })
    

    上一篇文档中也有涉及到导出 excel 文档,其实原理都是类似的,拼凑成一个字符串,然后生成a标签下载下来。

    导入线上 html 页面

    其实原理很简单,通过 iframe 加载线上的链接,加载完成后读取其中的 dom 结构即可完成相关操作。

    // 删除插入的 iframe 标签
    function delIframe() {
        var self = document.getElementsByTagName('iframe')[0];
        if (!self) {
            return;
        }
        var parent = self.parentElement;
        var removed = parent.removeChild(self);
    }
    
    // 利用iframe标签加载对应 html 文件(注意iframe的跨域问题)
    function insertIframe(url) {
        delIframe()
        var iframe = document.createElement("iframe");
        iframe.style.display = "none";
        iframe.src = url;
    
        if (iframe.attachEvent) {
            iframe.attachEvent("onload", function () {
                console.log("Local iframe is now loaded.");
            });
        } else {
            iframe.onload = function () {
                var doc = iframe.contentWindow.document;
                var content = doc.body.innerHTML
                editor.txt.html(content)  // wangEditor导入html文本
            };
        }
        document.body.appendChild(iframe);
    }
    
    // 取出输入的线上链接
    document.getElementById('importUrl').addEventListener('click', () => {
        var val = document.getElementById('linkUrl') && document.getElementById('linkUrl').value
        if (!val) {
            return
        }
        insertIframe(val)
    })
    

    页面完成之后,极大地加快了完成任务的速度,再多来几个页面也没问题。

    总结和感悟

    很多问题都能够以很简单的想法简化很多流程,在这里仅仅花了30分钟开发的页面,却节省了我90%的开发和修改的时间有,将几件极为简单的逻辑组装起来,却能提高成倍的开发效率。

    这个小工具让我认识到,原来不一定非得使用一些令人惊叹的技巧和精细化安排的设计,利用自己所学到的知识,就能解决工作和生活中绝大部分事情,有时候只需要一点点灵感就好了。


    起源地下载网 » 自制小工具(2):导出模板化的 html 文件

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元