11548 sujets

JavaScript, DOM et API Web HTML5

Bon, vous aurez pu le remarquez, je fais beaucoup de javascript en ce moment Smiley lol .

Et donc, j'ai envie de factoriser du code. Pour cela, j'aimerais pouvoir inclure un autre fichier javascript dans un fichier javascript. Mais je ne sais pas comment faire Smiley bawling . Une ame charitable pourrait-elle m'aider ? Smiley help

Merci d'avance
Bonjour.
J'ai mal compris ou bien tu veux faire un include d'un javascript à partir d'un autre fichier javascript ?
Si c'est ça, non c'est impossible, il faut définir deux tags script dans ta page XHTML
Oui, c'est bien cela que je cherchais à faire.
Tant pis...

Mais, en ajoutant un noeud script au noeud head lorsque la page est chargée, cela serait-il possible ?
Écrire une balise script dynamiquement a parfois des effets asez aléatoires. Le script est parfois exécuté, parfois non, parfois pas totalement... surtout avec IE. On pourrait résumer par « si tu as de la chance, ça marche, et sinon...... ça marche pas »
donc j'éviterais le genre de script qui fait :
document.write('<script ..... > </script>'); 

et de même si tu utilise le DOM avec createElement/appendChild ou similaire

Par contre, si tu tiens à charger ton script APRÈS que la page ait déjà été chargée, tu peux utiliser XMLHttpRequest. Là, à coup sûr ou presque, tant que le navigateur est compatible avex xhr, ça marche... exemple :


function createXhr () {
	if(window.XMLHttpRequest)
return new XMLHttpRequest();
else if(window.ActiveXObject)
return new ActiveXObject("Microsoft.XMLHTTP");
else
return null;
}
function loadScript (url) {
var xhr = createXhr();
if (!xhr) return alert("Impossible de charger le script " + url + ", votre navigateur ne supporte pas la technologie XMLHttpRequest.");

xhr.onreadystatechange = function () {
if (xhr.readyState==4&&xhr.status==200) {
eval(xhr.responseText);
}};

xhr.open("GET", url, false);
xhr.send(null);
}



Mais bon, je trouve que c'est un peu sortir la grosse artillerie pour pas grand chose, étant donné qu'on peut le faire directement en HTML. Maintenant ce type d'ouverture dynamique peut être vraiment efficace et pratique dans le cas d'un chat par exemple. Ça évite notamment de recharger la page et de ne charger qu'un script php à intervalles réguliers.
Modifié par QuentinC (24 Aug 2005 - 21:03)
j'allais justement bientot planché sur la question Smiley smile

De mon point de vue je pense qu'il vaut mieux faire un include avec createElement et pour savoir quand le fichier a finit de charger il suffit de le lui faire dire Smiley langue


je m'explique Smiley smile
Soit un fichier base.js, et external.js, c'est le fichier base.js qui est dans le html de la page.

dans base.js


var imports = function(url)
{
    var script = document.createElement('script')
    script.type = 'text/javascript';
    script.src = url;
}

function endLoadingfile(src)
{
alert('fichier ' + src + 'bien chargé');
isExternalLoaded = true;
}

var isExternalLoaded = false;
imports('external.js');



puis dans external.js en bas du fichier tu fais un appel à la méthode endLoadingFile

et tu sais que tant que isExternalLoaded est à false tu ne peux pas utiliser des fonctions de external.js ... Smiley ohwell

ensuite pour le code qui utilise les autres fichiers ils devront etre mis dans

window.onload = function()
{
// ICI
}

Pour l'instant j'ai pas encore eu le temps de bien regarder en détail mais c'est comme ca que je risque de faire, j'ai 3500lignes de codes, et 7 fichiers, et j'aimerais bien éviter d'ecrire 6 fois <script src="###" type="text/javascript"></script> car ces lignes ne sauront pas mis en caches elles Smiley smile

bref, il va falloir que j'y passe et j'essaierais de me souvenir de ce message pour te tenir au courant (sinon visite mon blog j'en parlerais surement Smiley cligne )

et non c'est pas impossible, il n'y a qu'a regarder le bluffant site : www.blindows.net ...