| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | <!DOCTYPE html><html>    <head>        <meta charset="utf-8" />        <meta name="viewport"            content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />        <title>选择文件</title>        <style>            .select-file-section {                position: relative;                width: 1px;                height: 1px;                overflow: hidden;                display: inline-block;            }        </style>    </head>    <body>        <div id="app" class="select-file-section">            <input ref="selectFileRef" :accept="accept" type="file" @change="onChange"></input>        </div>        <script type="text/javascript" src="../js/uni.webview.1.5.5.js"></script>        <script type="text/javascript" src="../js/vue-2.7.14.js"></script>        <script>            let appType = {};            document.addEventListener('UniAppJSBridgeReady', () => {                uni.getEnv(res => {                    appType = res;                });                //接受子页面传递过来的消息数据                window.addEventListener('message', (event) => {                    if (event.data.source === 'file-web') {                        uni.postMessage({                            data: event.data                        });                    }                });            });            //创建vue实例            var app = new Vue({                el: '#app',                data: {                    accept: '',                },                mounted() {                    let _this = this                    this.accept = this.getQueryString('accept');                    //接受子页面传递过来的消息数据                    window.addEventListener('message', (event) => {                        const {                            source,                            type                        } = event.data                        if (source === 'file-app' && type === 'selectFile') {                            _this.selectFileClick()                        }                    });                },                methods: {                    selectFileClick() {                        this.$refs.selectFileRef.click();                    },                    getQueryString(key) {                        let reg = new RegExp('(^|&)' + key + '=([^&]*)(&|$)');                        let result = window.location.search.substr(1).match(reg);                        return result ? decodeURIComponent(result[2]) : null;                    },                    onChange() {                        let fileDom = this.$refs.selectFileRef;                        const msgData = {                            type: 'selectFileChange',                            source: 'file-web',                            data: fileDom.files,                        }                        if (appType.h5) {                            window.postMessage(msgData, '*')                        } else {                            uni.postMessage({                                data: msgData                            });                        }                    }                }            })            //选择文件            function selectFile() {                if (appType.h5) {                    window.postMessage({                        type: 'selectFile',                        source: 'file-app',                        data: {}                    }, '*')                } else {                    app.selectFileClick()                }            }        </script>    </body></html>
 |