javascript 使用Uglify缩小时window.onload不工作

3pmvbmvn  于 2023-06-20  发布在  Java
关注(0)|答案(2)|浏览(111)

当不缩小脚本时,window.onload确实能正常工作。
但当我使用Uglify-js文件夹缩小脚本时,它没有。
如果我写以下内容并缩小它:

window.onload = function() { 
 // My code 
 console.log( "HELLO TO YOU" );
};

它在浏览器中不起作用。
但如果我写以下内容:

jQuery(document).ready(function() {
   // My code
 console.log( "HELLO TO YOU" );
});

它工作正常!
即使只有console.log()在缩小后也不能使用window.onload打印任何东西。

    • 任何想法??**

下面是输出:

window.onload = function() {
    let e = document.querySelector("#main-header")
      , t = e.offsetHeight
      , o = document.querySelector("#et-main-area")
      , n = document.querySelector("#wpadminbar");
    o.style.marginTop = t + "px",
    e.style.top = n ? n.offsetHeight + "px" : "0px"
}
,
jQuery(document).ready((function() {
    let e = document.querySelector("#main-header")
      , t = e.offsetHeight
      , o = document.querySelector("#et-main-area")
      , n = document.querySelector("#wpadminbar");
    o.style.marginTop = t + "px",
    e.style.top = n ? n.offsetHeight + "px" : "0px",
    console.log("HELLO")
}
hujrc8aj

hujrc8aj1#

window.onload = function() {
...
}
,
jQuery(document).ready((function() {
...

在函数表达式和对jQuery().ready()的调用之间有一个comma operator
这意味着分配给onload属性的值将是 * ready()的返回值 *,而不是函数表达式。
假设逗号是由Uglify-js生成的,那么这是Uglify-js中的一个bug,你应该在那里报告它。
旁白:

  • addEventListener优于on*属性(并且不会受到此错误的攻击)
  • DOMContentLoaded可能比load更适合您的需要
  • defer属性可能比任何类型的事件更适合您的需要。
icnyk63a

icnyk63a2#

在我的例子中,我最终将我的代码重新格式化为在各自的文件中命名函数的不同功能,并从window.onload或更好的addEventlistener( DOMContentLoaded)的单个调用中调用函数。

window.onload = function() {

 function one();

 function two();

 // ....

}

相关问题