Bonjour à tous,

J'ai passé ma journée à chercher et je pense ne pas etre loin du résultat voulu mais il y a un petit hic encore...

J'explique ce que je souhaite faire :
Dans une balise <object> , je souhaite afficher une page html qui est à la racine de mon site. Jusque là pas de soucis.
Maintenant, pour rendre tout cela un peu plus vivant sans modifier le code régulièrement, je voudrais mettre un fonction javascript qui fonction avec cette balise pour que la page soit affichée aléatoirement.

Pour le script js, j'ai trouvé ce qui me semble correspondre à un appel aléatoire et cela semble fonctionner sauf que cela me charge l'ensemble du site et pas seulement la balise object sur laquelle je veux agir.

Je vous remercie de vos éclairs
Bonjour,

Voilà pour moi Smiley smile

upload/12813-volcan.jpg
© Martin Rietze

Si besoin d'autre chose, une petite page de test n'est pas de refus Smiley cligne
salut,
perso je n'ai rien compris, ou alors je suis vraiment fatigué. Tu veux une fonction JS qui charge aléatoirement un fichier dans une balise <object> ? Et c'est aléatoire à partir de quoi ? Une liste de fichiers pré-établis ? Tu es arrivé à accéder à un répertoire ? Où cette sélection aléatoire pioche ?
Ta dernière phrase m'est encore plus incompréhensible Smiley sweatdrop .
Bon je vais faire avec du concret.

voici mon body :
<object data="take.html" type="text/html">

Avec ce code, j'appelle bien la page html en question qui s'affiche correctement.

Mon objectif est que cette page puisse être nouvelle à chaque fois que je reviens. j'ai donc trouvé un script avec une table :
var links = new Array(4)
links[0] = "totoro.htm"
links[1] = "invisibles.htm"
links[2] = "enrage.htm"
links[3] = "take.htm"

function go() {
var a = 1+Math.round(Math.random()*4)
var i = a
location = links
}

mais quand j'essaie d'appeler cette fonction cela charge toute ma page et pas seulement la balise <object>.

J'espère être plus clair comme ça
Je te propose ça :

HTML :
<object id="objet" type="text/html">


JS :
var a = Math.round(Math.random()*4);
var page = links[a];
obj = document.getElementById("objet");
if (obj) {
	obj.setAttribute("data", page);
}


Ton location=page, en effet, charge la page entièrement. Ici, on ne fait qu'attribuer le data à l'objet dont l'id est "objet".
Ok je viens de comprendre. C'est donc grosso modo ce que te proposes petibato à cela près que le random doit se faire sur le nombre 3 (i.e Math.round(Math.random()*3)) si non le nombre 4 sera sorti et provoquera une belle erreur vu que ton tableau va de 0 à 3.
À noter qu'on peut utiliser directement obj.data au lieu de passer par "setAttribute".
Zelalsan a écrit :
Ok je viens de comprendre. C'est donc grosso modo ce que te proposes petibato à cela près que le random doit se faire sur le nombre 3 (i.e Math.round(Math.random()*3)) si non le nombre 4 sera sorti et provoquera une belle erreur vu que ton tableau va de 0 à 3.


Nan nan, illustre Zelalsan, malgré tout le respect que tu m'inspires, Math.round(Math.random()*4) renvoie bien un nombre entre 0 et 3 : random retourne un flottant entre >=0 et <1, et round arrondit à l'entier inférieur. Donc : ça passe !
Mon cher Petitbato je te le dis aussi en toute amitié et respect, Math.round(Math.random()*4) renvoi bien un nombre entre 0 et 4. Tu peux essayer.
Argh, évidemment Zelalsan ! C'est pas Math.round mais Math.floor qui arrondit à l'entier inférieur !

Tu as donc raison bien sûr, mea culpa, et c'est Math.floor(Math.random()*4) qui fonctionne avec le *4. C'est assez typique, avec les codes qu'on n'a pas écrit soi-même, de zapper des trucs comme ça.

Respect +1 Smiley cligne
Y'a pas de problèmes Smiley smile J'allais te dire que tu devais penser à floor/ceil quand t'as écris cela. Pour être encore plus général, pour avoir un nombre aléatoire entre un minimum et un maximum c'est

min + Math.floor((max - min + 1) * Math.random());
Merci beaucoup de vos retours. Je commence à mieux comprendre.. sauf que j'ai encore un soucis.

J'ai mis ce code en place. Et il semble qu'il fonctionne mais la page ne s'affiche pas.
Pourtant en mettant des alert, je vois bien qu'il demande de m'afficher des pages différentes, mais il se bloque ensuite.
J'ai donc l'impression que cela bloque à partir de obj = document.getElementById("objet");

Ai-je oublié quelque chose ?

voici le site en ligne pour le moment : www.johanviaene.fr
Modifié par johan92100 (22 Oct 2013 - 10:41)
C'est parce que tu lances le script dans le head et non pas en fin de body.

Si tu veux laisser le script tout en haut, alors tu dois attendre la fin de chargement de la page.

window.onload = function () {
   Blabla JS
}