Dynamisch js files laden

Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
Hey,

Is het mogelijk om in een js script een js file te laden?

Ik heb een hoop JS API's die ik laad met html momenteel, maar slechts een deel ervan is nodig (hangt af van een bepaalde waarde die ik in die JS heb). Om te voorkomen dat er dus nutteloze zooi word geladen (wat de pagina behoorlijk vertraagd in mijn geval) zou het dus handig zijn om het via js te kunnen doen, en zo enkel de nodige te laden :)

Alvast bedankt :D

Cheers
BN
 
Je kan met server side scripting (zoals PHP) een fragmentje uit een bestand "knippen" en dat doorsturen naar de bezoeker.
Met Javascript zélf is dat denk ik niet mogelijk.
 
De scriptaculous-lib doet dit ook. Die doen het echter vanwege een bug in Safari geloof ik op een manier die niet zo heel mooi is. Ze kijkt welke JS-files worden opgevraagd (in de url) en doet voor elke file dit:

[JS]
var Scriptaculous = {
Version: '1.8.2',
require: function(libraryName) {
// inserting via DOM fails in Safari 2.0, so brute force approach
document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
},
REQUIRED_PROTOTYPE: '1.6.0.3',
load: function() {
function convertVersionString(versionString) {
var v = versionString.replace(/_.*|\./g, '');
v = parseInt(v + '0'.times(4-v.length));
return versionString.indexOf('_') > -1 ? v-1 : v;
}

if((typeof Prototype=='undefined') ||
(typeof Element == 'undefined') ||
(typeof Element.Methods=='undefined') ||
(convertVersionString(Prototype.Version) <
convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
throw("script.aculo.us requires the Prototype JavaScript framework >= " +
Scriptaculous.REQUIRED_PROTOTYPE);

var js = /scriptaculous\.js(\?.*)?$/;
$$('head script[src]').findAll(function(s) {
return s.src.match(js);
}).each(function(s) {
var path = s.src.replace(js, ''),
includes = s.src.match(/\?.*load=([a-z,]*)/);
(includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
function(include) { Scriptaculous.require(path+include+'.js') });
});
}
};

Scriptaculous.load();
[/JS]

Zie regels 4 + 5. Gewoon scripttags naar de broncode schrijven.
 
Ok, nice.

Ik heb ook dit script gev0nden:

Code:
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)

Ff uittesten wat het beste werkt :)

Thnx 4 the help :thumb:

Cheers
BN
 
Jouw manier lijkt me de mooiste manier, maar volgens de jongens (en meiden ?) van scriptaculous werkt dat niet in Safari 2.0 ... Is dus even afwegen wat je belangrijker vindt.
 
Ik denk dat in mijn geval document.write simpelweg geen optie is (is voor code in de wikimedia engine, op een plaats waar je niet echt iets kan gaan liggen outputten) :)
 
Dan zou ik inderdaad voor de DOM-methode gaan en een controle invoeren of dat wel werkt, zo niet, toch gewoon de hele zooi laden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan