栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我可以在加载整个页面之前运行javascript吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我可以在加载整个页面之前运行javascript吗?

不仅 可以 ,但是你必须做出特别的努力, ,如果你不想。:-)

当浏览器

script
在解析HTML时遇到标签时,它将停止解析并移交给运行脚本的Javascript解释器。在脚本执行完成之前,解析器不会继续(因为脚本可能会
document.write
调用解析器应处理的输出标记)。这是默认行为。有一些
script
标记属性可以更改该行为
defer
async
并且由于它们会更​​改行为,所以,加载了脚本
defer
async
不能用于
document.write
将HTML输出到正在加载的页面的脚本)。

所以考虑一下:

<p>Line 1</p><script>    alert("Paragraphs: " + document.getElementsByTagName("p").length);</script><p>Line 2</p>

如果您加载该页面,则警报将显示“段落:1”,因为

p
此时DOM中仅存在一个元素(包含“第1行”的元素)。您可能会或可能不会在浏览器显示中看到第1行,这取决于浏览器,因为即使该元素位于DOM中,浏览器也可能还没有时间
渲染 它(因为这
alert
使UI线程暂停了)。

有些浏览器正在… 调整…的行为

alert
。例如,如果您在页面中包含该代码并在后台的新标签页中将其打开,则最新版本的Chrome浏览器将允许该页面继续加载(并允许Javascript代码继续运行),并在您进入时显示警报标签,即使该标签处于活动状态时遇到该警报时的行为也大不相同。

无论是否已渲染它们,您都可以愉快地访问早期的元素,这就是为什么我们在上面看到“段落:1”的原因。这是另一个例子:

<p id='p1'>Line 1</p><script>    document.write("<p>p1 is null? " + (document.getElementById('p1') == null ? "yes" : "no") + "</p>");    document.write("<p>p2 is null? " + (document.getElementById('p2') == null ? "yes" : "no") + "</p>");</script><p id='p2'>Line 2</p>

您看到的输出是:

1号线p1为空?没有p2为空?是2号线

…因为

p1
脚本运行时就存在,但
p2
不存在。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470595.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号