addEventListener(“ load”)在Chrome中无法正常工作?

时间:2019-04-11 18:41:47

标签: javascript addeventlistener

<script id="js-cookie"></script>
<script id="vk-info"></script>
<script>
    document.querySelector("#jquery").addEventListener("load", onLoadJQuery);
    function onLoadJQuery() {
        document.querySelector("#js-cookie").setAttribute("src", "/js.cookie.js");
        document.querySelector("#js-cookie").addEventListener("load", onLoadJSCookie);
    }
    function onLoadJSCookie() {
        document.querySelector("#vk-info").setAttribute("src", "/vk-info.js");
    }

我一直使用这种检查,并且它在Firefox中有效。

基本上,jQuery是在我的主模板中加载的,然后在其子模板中,我也加载了一些脚本,但因此。因此,首先应该检查是否已加载jQuery,然后加载JS-Cookie,以及在加载时,然后加载我的自定义脚本。但是在Chrome上由于某些原因它无法正常工作。

我可以看到jQuery已加载到DOM中,并且ID为#jquery。但是即使加载了,我的其他脚本也无法加载。他们没有任何src属性,并保持为空。我对它们的来源进行了三重检查,一切都正确。尤其是因为它们可以在没有EventListener的情况下正常加载。

感谢您的帮助,也许我错过了一些东西。但是在Firefox中,所有功能都可以正常工作。

1 个答案:

答案 0 :(得分:1)

由于我们看不到如何加载jQuery脚本标签,因此很难确定,但是问题可能出在注册处理程序之前,load事件已经触发。 / p>

不同的浏览器具有different strategies to load as fast as possible,因此它们之间的确切加载顺序可能有所不同。如果在脚本标记的src处理程序之前设置了脚本标记的load,则即使标记成功加载,也不能保证该处理程序将运行。在某些浏览器中,它似乎可以可靠地运行,但是随着采用新的加载策略,在新版本中很容易更改。

如果不能确保在load之前设置脚本的src处理程序,则可以通过检查运行jQuery脚本的副作用来检测负载是否已经发生。 :

    if (window.jQuery) {
        onLoadJQuery();
    } else {
        document.querySelector("#jquery").addEventListener("load", onLoadJQuery);
    }