Chrome无法正确观察脚本标签上的onload事件?

问题描述 投票:3回答:2

我正在使用Javascript动态加载外部Javascript文件,在我的应用程序中,我需要知道何时将这些脚本完全加载到内存中,然后其余的过程才能继续进行。我尝试了以下代码来监视被附加到头部的脚本标签上的onload事件:

var headID = document.getElementsByTagName("head")[0];         
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.onload = scriptLoaded;
newScript.src = '/path/to/file.js';
headID.appendChild(newScript);

来源:http://www.hunlock.com/blogs/Howto_Dynamically_Insert_Javascript_And_CSS

这在FireFox(最新版本的Windows和OS X)中效果很好,但是似乎Chrome(同样在Windows和OS X版本中)无法正确观察到该事件,并且回调函数被过早调用。

有什么想法吗?

javascript google-chrome event-handling dom-events onload
2个回答
2
投票

通过使用jQuery重写解决了该问题:

var script_tag = $('<script><\/script>');
script_tag.attr('type', 'text/javascript');
script_tag.bind('load', function(e)
{
    console.log('script loaded');
});
script_tag.attr('src', '/path/to/file.js');
$('head')[0].appendChild(script_tag[0]);

[不确定为什么可以解决这个问题,也许chrome不喜欢使用纯JavaScript在第一个实现中创建脚本标签的方式。 耸肩


0
投票

您可以尝试将函数调用包装在另一个函数中。我遇到了一些错误,例如您正在描述,有时执行以下操作会有所帮助:

newScript.onload = function(){ scriptLoaded; };

[Chrome似乎似乎正在尝试评估scriptLoaded以便将返回值分配给newScript.onload

© www.soinside.com 2019 - 2024. All rights reserved.