接口下载html/htm/txt文件,展示在页面上

30 阅读1分钟
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        
    </style>
</head>

<body>
    <div id="html">

    </div>
    <div id="loading"></div>
</body>

<script>

    var getFileFromUrl = function (url, fileName) {
        return new Promise((resolve, reject) => {
            var blob = null;
            var xhr = new XMLHttpRequest();
            xhr.open("GET", url);
            xhr.setRequestHeader('Accept', 'text/html');
            xhr.responseType = "blob";
            xhr.onload = () => {
                blob = xhr.response;
                let file = new File([blob], fileName, { type: 'image/html' });
                resolve(file);
            };
            xhr.onerror = (e) => {
                reject(e)
            };
            // 发送
            xhr.send();
        });
    };
    let file = window.location.href.split('file=')?.[1]
    let fileObj = null
    // document.getElementById('iframe-html').src = file
    getFileFromUrl(file, 'html文件')
        .then((response) => {
            fileObj = response
            var reader = new FileReader();
            reader.onload = (function (theFile) {
                return function (e) {
                    if (e.target?.result) {
                        const txtString = e.target.result
                        const patrn = /[\uFE30-\uFFA0]/gi;//检测中文
                        // 检测当前文本是否含有中文(如果没有,则当乱码处理) 
                        if (!patrn.exec(txtString)) { //没有中文,即文件乱码了或者都是英文. // 两个格式的英文编码一样,所以纯英文文件也当成乱码再处理一次
                            let reader_gb2312 = new FileReader()
                            // 再拿一次纯文本,这一次拿到的文本一定不会乱码
                            reader_gb2312.readAsText(fileObj, 'gb2312')
                            reader_gb2312.onload = e2 => {
                                document.getElementById('html').innerHTML = e2.target.result
                            }
                        } else {
                            document.getElementById('html').innerHTML = txtString
                        }

                        var loading = document.getElementById("loading");
                        setTimeout(() => {
                            var aAr = document.querySelectorAll("a[name*='table']");
                            var tabAr = document.querySelectorAll("table")
                            aAr.forEach((element, ind) => {
                                // debugger
                                element.style.width = tabAr?.[ind]?.offsetWidth + 'px'
                            })
                            loading.style.display = 'none';
                        }, 500);
                    }
                };
            })(fileObj);
            reader.readAsText(fileObj, 'utf-8')
        })
        .catch((e) => {
            console.error(e)
        });


</script>

</html>