一些观察结果。某些原生javascript函数正在阻止。如警报框。如果浏览器允许用户编写其他阻止功能,那么他们可能不会比打破自己的页面更恶意。所以我不相信这是一个安全问题。
启用阻止功能可能会导致糟糕的设计模式。也许目标只是为了阻止草率设计,因为javascript绝对是异步的。但这是一种相当自以为是的设计概念,可以构建到语言本身中。
问题: 是否有任何历史或技术原因导致无法建立另一个功能?或者相反,我错了,是否有某种方法可以阻止其他功能?
推荐的设计模式。我认为通过阻止功能显示我的意思是值得的。正常的设计模式是:
set FIRST_DAY='2017-03-05';
... day > date '${hiveconf:FIRST_DAY}' ...
但是在我的代码中有很多地方有没有可能的代码我想要执行,直到执行doSomethingThatMayTakeTime函数。在这种使用场景中,为什么我们可以说:
... day > date ''2017-03-05'' ...
正如您在此特定用例中所看到的那样,认为这是一种更清洁的方法并不会让人发疯。虽然这看似具体,但我经常遇到这种情况。将警报框替换为其他模态框时会出现一个简单示例。
答案 0 :(得分:2)
是否有某种方法可以阻止其他功能?
它们的功能本身全部都是阻止的。放入无限循环并观察您的浏览器挂起。
这是异步的I / O.不要混淆两者。
答案 1 :(得分:1)
$('#blocking').click(function() {
var d= new Date().getTime();
while(new Date().getTime() - d < 10000) {
var a=1;
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="blocking">Block this tab for 10 seconds</button>
&#13;
答案 2 :(得分:0)
当您运行阻止功能时,不仅页面上的代码被阻止。它是整个JavaScript引擎的主线程。如果用户单击一个按钮,尝试键入输入字段,滚动页面,或者执行生成JS引擎应该处理的事件的任何事情,在阻塞函数返回之前不会发生任何事情。
这是一件坏事。对于用户来说,它与浏览器崩溃无法区分。
请注意,警告框不会以相同方式阻止。是的,主事件处理线程被阻止,但不是所有事件处理。该对话框接管所有事件处理并以响应方式处理它。可以这样想:弹出警报暂时改变什么被视为事件;它根本不会阻止事件。
你说,“ javascript绝对是异步的”。我不知道你的意思,但作为一揽子声明,这绝对是不真实的。 (例如,请参阅this thread。)您需要特别努力创建异步活动。有关详细信息,请参阅this documentation。