首页   注册   登录
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 · 253 天前 · 2775 次点击
    这是一个创建于 253 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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