【问题标题】:What is Synchronous XMLHttpRequest?什么是同步 XMLHttpRequest?
【发布时间】:2015-07-06 18:08:01
【问题描述】:

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

“主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。”

我的代码是这样的:

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

我的问题是:

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

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

*********** 编辑 ***********

test.js的内容是

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

在 HTML 中有一个h1

【问题讨论】:

  • 那不是同步的 XMLHttpRequest。那个 JS 文件可能正在制作一个。
  • test.js的内容就是console.log(document.getElementsByTagName('h1')),我正在编辑到主线程。
  • 在文档中添加脚本标签不会创建 XMLHttpRequest。问题出在其他地方。错误信息必须带有行号和文件名,您能检查并发布导致此错误的原因吗?
  • 这是 jQuery 2.1.4 中的这一行(code.jquery.com/jquery-2.1.4.min.js):if (f.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields)

标签: javascript xmlhttprequest


【解决方案1】:

我相信您的问题与async有关

在 HTML5 中:asyncdefer,您可以告诉浏览器何时运行您的 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,浏览器将在页面完成后运行您的脚本 解析。 (不需要完成所有图像文件的下载。这个 很好。)

我在下面找到答案:synchronous-xmlhttprequest-on-the-main-thread-is-deprecated

使用 jQuery 将脚本标签附加到文档将导致它 使用async:false 加载脚本并触发此警告。

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

未测试。仅供参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多