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

2019-06-09 15:38:04 +08:00
 cyrbuzz

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

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

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

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

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

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

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

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

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

© 2021 V2EX