Я хочу программно загрузить файл .js и выполнить некоторые действия после его завершения. Файл, который я хочу включить, размещен в домене, в который он будет включен.
В частности, файл, который я загружаю, это swfobject.js. Я хочу проверить его наличие и загрузить его только при необходимости.
Вот что у меня есть:
// BHD is defined elsewhere. For this example:
var BHD = {};
BHD.uid = function () {
return 'x'+(+(''+Math.random()).substring(2)).toString(32)+(+new Date()).toString(32);
};
BHD.include = function (file, callback) {
var uid = BHD.uid();
frame = document.createElement('iframe');
frame.src = file;
frame.id = frame.name = uid;
frame.onload = function () {
var s = document.getElementsByTagName('script')[0];
var d = frames[uid].document.documentElement;
var script = document.createElement('script');
script.type = 'text/javascript';
script.text = d.textContent||d.innerText;
s.parentNode.insertBefore(script, s);
callback();
s.parentNode.removeChild(s);
frame.parentNode.removeChild(frame);
}
document.documentElement.appendChild(frame);
}
Это похоже на работу. Хотя это уродливый хак. Содержимое файла .js загружается в iframe, и когда загрузка iframe заканчивается, в основной документ добавляется новый элемент сценария с содержимым iframe. По-видимому, это приводит к немедленной загрузке сценария, поэтому обратный вызов может быть вызван сразу после этого.
Мне интересно, есть ли лучший способ сделать это. Я ищу что-то вроде кросс-браузерного события 'onload' для тегов скрипта или какой-то другой способ избежать взлома iframe.