什么是同步 XMLHttpRequest?

What is Synchronous XMLHttpRequest?

我正在测试,看看是否可以在文档准备好后使用 javascript 加载 .js,并从 chrome 收到此警告消息:

"Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience."

我的代码是这样的:

$(document).ready(function(){
    var s=$('<script src="test.js"></script>');
    $('body').append(s);
});

我的问题是:

1) 在这种情况下,什么被认为是 "Synchronous XMLHttpRequest"?我认为这与 'test.js' 的加载有关,但如果我将其更改为 var s=$('<img src="image.png"></img>');,则不会显示警告消息。

2) 如果必须以这种方式加载 .js 文件,最佳做法是什么?

*********** 正在编辑 ***********

test.js的内容是

console.log(document.getElementsByTagName('h1'))

HTML中有一个h1

我认为您的问题与 async

有关

在 HTML5: async, defer 中,您可以告诉浏览器何时 运行 您的 JavaScript 代码。有3种可能:

<script       src="myscript.js"></script>

<script async src="myscript.js"></script>

<script defer src="myscript.js"></script>
  1. 如果没有 asyncdefer,浏览器将立即 运行 您的脚本, 在呈现脚本标签下方的元素之前。
  2. 使用async(异步),浏览器会继续加载HTML 页面并在浏览器加载并执行脚本时呈现它 同时。
  3. 使用 defer,浏览器将在页面完成时 运行 您的脚本 解析。 (无需下载所有图像文件。这 很好。)

我找到了以下答案:

Using jQuery to append a script tag to the document will cause it to load the script with async:false and trigger this warning.

var script = $("<script></script>");
script.attr("src", player.basepath + "whatever.js");
$(document.body).append(script);

未测试。仅供参考。