Chrome неправильно наблюдает событие загрузки на тегах скрипта? - PullRequest
3 голосов
/ 24 января 2011

Я использую javascript для динамической загрузки внешних файлов javascript, и в моем приложении мне нужно знать, когда эти сценарии полностью загружаются в память, прежде чем можно будет продолжить остальную часть процесса.Я пробовал следующий код для отслеживания события загрузки на тегах сценария, добавляемых к голове:

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) не наблюдает событие должным образом, и функция обратного вызова вызывается преждевременно.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 24 января 2011

удалось решить проблему, переписав ее с помощью 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 просто не понравился способ создания тега script в первой реализации с использованием чистого JavaScript. пожав плечами

0 голосов
/ 24 января 2011

Вы можете попробовать обернуть ваш вызов функции в другую функцию.У меня была ошибка, как вы описываете, и иногда помогает следующее:

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

Похоже, что Chrome пытается оценить scriptLoaded, чтобы присвоить возвращаемое значение newScript.onload.

...