js 如何捕获浏览器抛出的黄色警告异常?

2019-10-04 21:08:19 +08:00
 chenliangngng

源代码如下:

html 部分:

<button id="button1">延迟 4s</button><button id="button2">延迟 5s</button><input id="input" type="file">

js 部分:

document.getElementById('button1').onclick = function(){ setTimeout(() => { document.getElementById('input').click() }, 4000) }

document.getElementById('button2').onclick = function(){ setTimeout(() => { document.getElementById('input').click() }, 5000) }

点击 button1,延迟 4s,会弹出 input 弹窗;

点击 button2,延迟 5s,弹窗将失效,控制台报黄色警告: File chooser dialog can only be shown with a user activation.

搜相关资料是由于浏览器安全机制,如果距离用户操作时间较长的话,会导致此类事件失效。

我尝试用 try catch 和 window.onerror,都无法捕获此异常,所以无法判断是不是出错了。

不知道大佬们有啥高招?

6325 次点击
所在节点    程序员
9 条回复
oatw
2019-10-04 21:25:41 +08:00
试试覆盖 console.warn 方法?
nifury
2019-10-04 23:29:54 +08:00
弹窗失效的话之前选择的文件会被清除的吧
你只要监听 input 的 onchange 应该就能知道了
chenliangngng
2019-10-04 23:47:36 +08:00
@oatw 黄色告警不是我写的,是 chrome 控制台弹出的,我写的代码除了 html body script 这些标签,上面的就是全部
chenliangngng
2019-10-04 23:49:13 +08:00
@nifury 你尝试一下只点击 button2,选文件的弹窗是不会出来的,取而代之的是控制台报类似 console.warn 的信息
nifury
2019-10-05 00:00:55 +08:00
@chenliangngng #4 嗯……说的没错。这个乍一看似乎没有好的解决办法
zqx
2019-10-05 06:27:32 +08:00
这个要看浏览器有没有暴露 BOM 的方法了,不同的浏览器不一样
azh7138m
2019-10-05 12:12:36 +08:00
没有,这个是安全特性
部分操作需要由用户行为触发
myqoo
2019-10-05 20:39:24 +08:00
为什么要这样写?老版本的 Chrome 连 setTimeout 1ms 都不允许的,还是会有兼容性问题的
chenliangngng
2019-10-06 19:14:42 +08:00
@myqoo 因为有业务需求导致要用其他方式触发 input,而中间有间隔,上例只是一个简单的 demo。我想要知道的是如何捕获这类问题,比如,用于异常场景时出现时,提示用户重试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/606340

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX