页面加载后如何正确运行JS

时间:2019-06-16 17:36:29

标签: javascript jquery html onload document-ready

清理错误和贬值的网页,
我遇到了以下警告消息:

  

jquery-3.4.1.js:9725
  [弃用]不赞成在主线程上使用同步XMLHttpRequest,因为它对最终用户的体验具有不利影响。
  如需更多帮助,请检查https://xhr.spec.whatwg.org/

我想正确处理JavaScript:

  1. 将脚本和链接保留在一个独立的区域中,即
  2. 页面加载后运行


但是我不知道该怎么做

  1. 从内联JS引用转换为JS文件
  2. 内部JS格式应为



我一直在使用:

<head>

    <script>$(document).ready(function () { $('<script/>', { type: 'text/javascript', src: 'assets/js/set-background.js' }).appendTo('head'); }); </script>

</head>

带有JS文件:


...
var body = document.getElementsByTagName("body")[0];
body.className += " change-" + idx;
...

如果脚本为:

,则不会发生警告。

<body>
    ...
    <script src="assets/js/set-background.js"></script>
    ...
</body>



尝试过,

<head>

    <script>$(function(){'assets/js/set-background.js'}) </script>

</head>
<head>

    <script type="text/javascript" src="assets/js/set-background.js"></script>

</head>
<body class="container" onload="assets/js/set-background.js">



我看过其他开发人员的讨论:

  1. javascript - How to run a function when the page is loaded? - Stack Overflow
  2. Pure JavaScript equivalent of jQuery's $.ready() - how to call a function when the page/DOM is ready for it - Stack Overflow
  3. javascript - $(document).ready equivalent without jQuery - Stack Overflow
  4. How to run a function in jquery - Stack Overflow


我也一直在阅读:

  1. onload Event
  2. .load() | jQuery API Documentation

1 个答案:

答案 0 :(得分:2)

此警告与页面加载无关。问题在于,您在某个地方使用了带有{async“参数class SimilarProductRelation < ApplicationRecord belongs_to :product belongs_to :similar_product, class_name: "Product" end class Product < ApplicationRecord # self being the "origin" has_many :similar_products_relations, source: :product_id, class_name: "SimilarProductRelation" has_many :similar_products, class_name: "Product", through: :similar_products_relations # self being the "destination" has_many :similar_products_relations_as, source: :similar_product_id, class_name: "SimilarProductRelation" has_many :similar_products_as, class_name: "Product", through: :similar_products_relations end # migration create_table :similar_product_relations do |t| t.references :product, foreign_key: true, null: false, index: true t.references :similar_product, foreign_key: { to_table: :products }, null: false, index: true end 的{​​{3}}。

这不好,因为JS事件循环行为(单线程),所以如果下载请求的数据花费较长时间,则页面将完全冻结:没有单击,滚动,其他JS函数,什么都没有!

要解决此问题,您必须使用异步ProductXMLHttpRequest