开发者社区> 问答> 正文

钉钉安卓h5 上传图片文件名转义无法触发 onChange 事件

问题

文件名包含转义字符,不触发 input 标签的 onChange 事件

希望修复,在浏览器中测试正常

环境

钉钉安卓版本: 7.1.15

Mozilla/5.0 (Linux; U; Android 12; zh-CN; V2166BA Build/SP1A.210812.003) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 UWS/5.6.0.9 Mobile Safari/537.36 AliApp(DingTalk/7.1.15) com.alibaba.android.rimet/33611078 Channel/10003993 language/zh-CN abi/64 xpn/vivo UT4Aplus/0.2.25 colorScheme/dark

操作步骤

1.上传的图片命名为 test%2ftest.jpg
2.在钉钉中 打开调试 index.html
3.上传图片,不触发 input 标签的 onChange 事件

使用以下代码index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title></title>
        <script src="https://cdn.bootcdn.net/ajax/libs/eruda/3.0.1/eruda.js"></script>
        <script>
            eruda.init()
        </script>
    </head>
    <body>
        <input onChange="onChange()" type="file" accept="image/*" multiple />
        <script>
            function onChange(e) {
                alert('onChange')
            }
        </script>
    </body>
</html>

展开
收起
_wwh 2023-12-29 15:52:57 63 0
1 条回答
写回答
取消 提交回答
  • 这个问题可能是由于钉钉安卓版本的内置浏览器对于文件名包含转义字符的处理存在一些兼容性问题。以下是一些可能的解决方法:

    1. 使用 onInput 事件替代 onChange 事件
      尝试替换 onChange 事件为 onInput 事件,看看是否能够正常触发。
    <input onInput="onChange()" type="file" accept="image/*" multiple />
    
    1. 使用 webkitEntries 获取文件信息
      钉钉内置浏览器可能不支持某些标准的文件API,可以尝试使用 webkitEntries 来获取文件信息。
    <input id="fileInput" onChange="onChange()" type="file" accept="image/*" multiple />
    
    <script>
        function onChange(e) {
            const input = document.getElementById('fileInput');
            const files = Array.from(input.files || []);
            const entries = input.webkitEntries || [];
    
            for (let i = 0; i < entries.length; i++) {
                const entry = entries[i];
                if (entry.isFile) {
                    entry.file(file => {
                        alert('onChange');
                    });
                }
            }
    
            for (let i = 0; i < files.length; i++) {
                alert('onChange');
            }
        }
    </script>
    
    1. 使用第三方库如 dropzone.jsuppy.js
      使用专门处理文件上传的第三方库可能会有更好的兼容性和稳定性。这些库通常已经处理了各种浏览器的兼容性问题。
    2023-12-29 16:24:10
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
钉钉小程序——为工作方式插上翅膀 立即下载
钉钉客户端自动化的应用 立即下载
使命必达 —— 钉钉企业级 消息服务的机遇与挑战 立即下载