Win10使用input的color拾取后输入法切换不了的bug

今天在写一个小项目的时候发现一个bug,测试发现后在win10上都可以稳定复现,Mac电脑不受影响

来看bug详情和复现过程:

1. 首先页面有一个input元素,type为color

2. 页面有其他输入框,如input元素,type为text

3. color点击拾取颜色,此时电脑输入法将被卡成英文

来看具体过程

这里页面上有两个input元素,一个type为color,一个市正常的输入框

 此时使用color的颜色拾取功能

 此时再到输入框中输入内容,发现只能输入英文了,输入法切换也失效

 这个颜色拾取工具,只要是点过,哪怕不去拾取颜色也会导致这个bug的出现,直接在任务栏中点击切换输入法也是不行的,更加离谱的是刷新当前页面也无法切换输入法

 在win10的情况下,edge和Chrome都是一样的问题


这个问题我在网上找了好久也没有发现产生原因和解决方案

但是

发现当失去焦点后这个输入法就正常了,但是不是文本框失去焦点,而是浏览器失去焦点

尝试:

先再次复现一下bug

此时输入法无法切换,点击地址栏后再点回来 这个时候就正常了,输入法可以正常切换了

 但是,也没有什么办法让浏览器自动失去焦点呢,毕竟用户自己去点其他标签页也不合适

方法1:alert

 

 此时中文就正常了,当alert弹出的时候页面就失去了焦点,bug也就恢复了正常,也就是说让他自己失去焦点这条路是通的

但是这个alert终归是不太好,需要找一个无感的方案

此时就想到了一个方法

window.open

因为window.open他肯定会失去焦点

方案2:window.open

 

此时就可以无感的解决这个问题了

但是依然有问题,就是在一些低配的电脑上可能存在页面闪一下的问题

简单优化一下,最终效果

<body>
    <input type="color" onblur="solve()">
    <input type="text" placeholder="普通输入框">
    <!-- <button onclick="solve()">window.open解决</button> -->
    <script>
        function solve() {
            //是否Windows系统
            let isWindows = navigator.userAgent.indexOf('Windows') > -1;
            if (!isWindows) return;
            let win = window.open('about:blank');
            win.close();
        }
    </script>
</body>

 


这个问题属于是微软的bug,也只会在原生的颜色拾取上出现,所有完全可以使用第三方的颜色拾取组件


版权声明:本文为qq_51807875原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。