请教各位, Js 中的 alert confirm 是什么个机制?

2019 年 6 月 9 日
 cyrbuzz

目前只发现这两个可以阻塞一会线程,然后还能顺利让前面还未来得及生效的内容执行完。

如果想模拟有没有好方法?

原谅我运用场景不方便说= =。

5320 次点击
所在节点    JavaScript
21 条回复
yamedie
2019 年 6 月 9 日
好像是各家浏览器自己的内部实现。
用 async/await 可以模拟?
cyrbuzz
2019 年 6 月 9 日
@yamedie
那怎么实现“阻塞”这个状态呢?
rabbbit
2019 年 6 月 9 日
async await + setTimeout
cyrbuzz
2019 年 6 月 9 日
@rabbbit
如果页面在 Timeout 之前就发生了跳转那就不能执行了。
murmur
2019 年 6 月 9 日
这个阻塞不是简单的 async 你就不要想着完美实现了 能用 es3 语法实现的阻塞想想都神奇
cyrbuzz
2019 年 6 月 9 日
@murmur
也就是只能用 alert 或者 confirm 了?
setSweetChild
2019 年 6 月 9 日
js 是单线程的,但浏览器不是啊。阻塞一个标签页应该是在 js 之外的浏览器层面做的
cyrbuzz
2019 年 6 月 9 日
@setSweetChild
是的呀,比如 360 浏览器就会标记页面之后跳转到安全提示。
yixiang
2019 年 6 月 9 日
XMLHttpRequest 有同步模式。

然而,干嘛要阻塞,应该可以有不用阻塞达到目的的方法。比如,setTimeout, setImmediate, requestAnimationFrame
cyrbuzz
2019 年 6 月 9 日
@yixiang
如果一定要阻塞呢。
yixiang
2019 年 6 月 9 日
@cyrbuzz XMLHttpRequest 有同步模式。
shakaraka
2019 年 6 月 9 日
@cyrbuzz 如果要线程卡住只能是浏览器之外做的事,js 的话只能用 alert confirm 才能做所谓的暂停,
@yixiang XMLHttpRequest 的同步模式严格来说不算是线程“卡住”
kekxv
2019 年 6 月 9 日
@cyrbuzz 那就辞职试试?
yamedie
2019 年 6 月 9 日
脱离场景空谈实现,有点难
orzorzorzorz
2019 年 6 月 9 日
问问看能不能让客户换上 chrome 装上扩展,这个应该只能从外部来了
cyrbuzz
2019 年 6 月 9 日
@orzorzorzorz
@yamedie
@kekxv
@wunonglin
目前 alert 可以达到效果,想问问其中的原理以及是否可以模拟出更棒的体验效果,毕竟 alert 不能自定义不是。
orzorzorzorz
2019 年 6 月 9 日
alert 不是 js 的方法,是浏览器的。
你写的 js 跑在浏览器里,而浏览器本身也有代码来组成浏览器本身这容器。alert 到底还是调用了浏览器注入的方法,具体如何实现,得去找找人家开源的代码了。
要实现这个,你得让用户用你定制的浏览器,常见的是弄个客户端了。
cyrbuzz
2019 年 6 月 9 日
@orzorzorzorz
受教了,感谢。
liuzhiyong
2019 年 6 月 9 日
@yixiang 你这个是正确答案。
liuzhiyong
2019 年 6 月 9 日
@cyrbuzz XHR 可以做成阻塞模式的。

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

https://v2ex.ih06.com/t/572141

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

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

© 2021 V2EX