V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
cyrbuzz
V2EX  ›  JavaScript

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

  •  1
     
  •   cyrbuzz · 2019-06-09 15:38:04 +08:00 · 4235 次点击
    这是一个创建于 2020 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    然而,干嘛要阻塞,应该可以有不用阻塞达到目的的方法。比如,setTimeout, setImmediate, requestAnimationFrame
    cyrbuzz
        10
    cyrbuzz  
    OP
       2019-06-09 16:25:44 +08:00
    @yixiang
    如果一定要阻塞呢。
    yixiang
        11
    yixiang  
       2019-06-09 16:32:43 +08:00
    @cyrbuzz XMLHttpRequest 有同步模式。
    wunonglin
        12
    wunonglin  
       2019-06-09 16:33:49 +08:00
    @cyrbuzz 如果要线程卡住只能是浏览器之外做的事,js 的话只能用 alert confirm 才能做所谓的暂停,
    @yixiang XMLHttpRequest 的同步模式严格来说不算是线程“卡住”
    kekxv
        13
    kekxv  
       2019-06-09 16:34:07 +08:00 via Android
    @cyrbuzz 那就辞职试试?
    yamedie
        14
    yamedie  
       2019-06-09 16:37:01 +08:00 via Android
    脱离场景空谈实现,有点难
    orzorzorzorz
        15
    orzorzorzorz  
       2019-06-09 16:42:45 +08:00
    问问看能不能让客户换上 chrome 装上扩展,这个应该只能从外部来了
    cyrbuzz
        16
    cyrbuzz  
    OP
       2019-06-09 16:46:51 +08:00
    @orzorzorzorz
    @yamedie
    @kekxv
    @wunonglin
    目前 alert 可以达到效果,想问问其中的原理以及是否可以模拟出更棒的体验效果,毕竟 alert 不能自定义不是。
    orzorzorzorz
        17
    orzorzorzorz  
       2019-06-09 16:55:53 +08:00   ❤️ 1
    alert 不是 js 的方法,是浏览器的。
    你写的 js 跑在浏览器里,而浏览器本身也有代码来组成浏览器本身这容器。alert 到底还是调用了浏览器注入的方法,具体如何实现,得去找找人家开源的代码了。
    要实现这个,你得让用户用你定制的浏览器,常见的是弄个客户端了。
    cyrbuzz
        18
    cyrbuzz  
    OP
       2019-06-09 16:59:31 +08:00
    @orzorzorzorz
    受教了,感谢。
    liuzhiyong
        19
    liuzhiyong  
       2019-06-09 22:01:58 +08:00
    @yixiang 你这个是正确答案。
    liuzhiyong
        20
    liuzhiyong  
       2019-06-09 22:03:41 +08:00
    @cyrbuzz XHR 可以做成阻塞模式的。
    zhw2590582
        21
    zhw2590582  
       2019-06-10 09:22:34 +08:00 via iPhone
    浏览器自己实现的接口,没什么特殊的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3344 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:30 · PVG 19:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.