【发布时间】:2019-06-09 13:14:41
【问题描述】:
我在一次工作面试中被问到:
如果脚本加载时间超过 X 秒,则整个 页面应该被加载(除了这个同步脚本)。请注意,我们 不应将脚本更改为异步运行(例如,通过 附加孩子)。没有服务器。
嗯,我有几种方法:
-remove the dom
-window.abort
-mess up the document by document.write("'</s'+'cript>'")
-moving it to an iframe
-adding headers of CSP
没有任何效果。
这是删除脚本dom标签的代码(例如):
请注意,脚本后面有 TEXT。所以预计会在 1 秒后看到文字。
<body>
<script>
setTimeout( function (){
document.querySelector('#s').parentNode.removeChild(document.querySelector('#s'))
},1000); //change here
</script>
<script id ='s' src="https://www.mocky.io/v2/5c3493592e00007200378f58?mocky-delay=40000ms" ></script>
<span>!!TEXT!!</span>
</body>
问题
我似乎找不到如何让页面在特定超时后继续加载的技巧。我该怎么做?
顺便说一句,我见过有趣的方法 here
【问题讨论】:
-
这篇文章可能会回答你的问题:flaviocopes.com/javascript-async-defer。
-
@EdOverflow 会使其异步。这个问题明确说我们不应该。
-
啊,哎呀。我的错,@RoyiNamir。
-
不管解决方案如何,这都是我听过的最糟糕的面试问题之一。它测试了一个大多数人都不知道的非常具体的 hack,因为这个用例是由可怕的代码气味组成的。答案很可能被新手和专家知道,因为它是纯粹的案例知识。“你将如何解决这个问题?”的真正答案是“我不会。我会弄清楚如何解决这种情况的根本原因,而不是使用一些在我之后处理此文件的人都不会理解的疯狂黑客行为。”见鬼,这甚至可能是他们想要的答案。叹。我跑题了。
-
@Vulcan 这解决了这里的 cmets 存在的一些相同问题,虽然这是一个聪明的解决方案,但它仍然没有解决 OP 的非常具体的请求,即不能加载文件",也不允许加载脚本标签后面的 HTML。
标签: javascript html