当前位置: 首页 > 面试题库 >

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

吴展
2023-03-14
问题内容

我想在整个页面加载之前运行一些javascript。这可能吗?还是代码开始在上面执行</html>


问题答案:

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

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



 类似资料:
  • 问题内容: 我的设计师认为在不同页面之间创建过渡是一个好主意。本质上,只有内容部分会重新加载(页眉和页脚保持不变),并且只有内容div应该具有过渡效果(淡入淡出或某种形式)。创造这种效果并不是真正的问题,让Google(分析)感到高兴的是… 我不喜欢的解决方案以及原因; 仅使用ajax加载内容div:谷歌将看不到任何内容,这意味着将永远找不到该网站,或者仅显示由ajax检索的部分,而这些部分根本不

  • 我需要添加一个单独的登录页面之前,招摇用户界面的身份验证从另一个服务器。从这个请求中,我将获得一个密钥,我必须将其添加到来自swagger UI的每个req的标头中。 我在swagger 2.0中使用节点服务器和swagger工具。

  • 我有一个方法,可以为WebView的WebEngine设置一个新的网页,需要等到网页加载完成后才能继续使用当前方法。 基本上我想要: 我尝试过使用ChangeListener(),但它只会在我的方法完成执行后执行。我在谷歌上搜索了许多导致更多挫折感的术语,比如“java非阻塞等待布尔值”。最终,我成功地启动了新线程(以防止应用程序GUI锁定)并使用了倒计时(与Thread.join()相反)。下面

  • 问题内容: 我刚刚开始学习jQuery和AJAX。我可以通过将本地页面(在磁盘上)加载到div中,但是外部站点似乎无法正常工作。我什至使用Wireshark来检查数据是否从服务器发送(是)。示例代码如下: 首先可以这样做吗?如果是这样,怎么办? 问题答案: 开箱即用:否。这是一个安全问题。但是,有一些 不同的 解决方法。

  • 我想用nodejs中的webdriver来控制一个使用ajax的网站,特别是它总是对服务器有http请求。 我还试图通过按浏览器窗口上的ESC来停止连接。之后,似乎可以立即运行。但我在WebDriver API中没有找到类似的函数。 那么有没有办法解决这个问题呢?任何一种都可以,比如: 无论页面是否加载,立即运行; 类似的webdriver api可以停止页面中的所有活动连接。 https://g

  • 我在谷歌上搜索了几个小时,但我找不到任何正确的答案!