Mam taką klasę (korzystam z prototype):
Addons = Class.create();
Addons.prototype = {
initialize: function(){},
require: function(libraryName) {
try {
var script_tag = new Element('script',{
type: 'text/javascript',
src: libraryName
});
$$("head")[0].appendChild(script_tag);
} catch(e){
// inserting via DOM fails in Safari 2.0, so brute force approach
document.write('<script type="text/javascript" src="' + libraryName + '"></script>');
}
}
}
I używam jej w sposób następujący:
Engage = new Addons();
var include = $w('global/functions main_menu/functions components');
var path = '../../scripts/';
include.each(function(file){
Engage.require(path + file + '.js');
});
w global/functions.js znowu dynamicznie dołączam kilka plików, tworząc swoistą rekurencję, wszystkie przeglądarki sobie z tym radzą (tak, nawet IE6) z wyjątkiem Opery i to w wersji bodajże ostatniej (9.26). Problem jest takiej natury, że tablice include i path są nadpisywane w każdym nowym rekurencyjnym wywołaniu, dlatego dołącza tylko kilka plików, bo reszte zamazuje. Dziwne zachowanie Opery. Miał ktoś podobny problem?