Problème avec le chargement des iframes. - HTML/CSS - Programmation
Marsh Posté le 10-07-2005 à 11:18:51
et puis tu pourrais mettre ton code entre [code ] et [ /code]
Edit : et coder comme on fait de nos jours, c'est à dire, vu que tu as des css, foutre les attribtus de présentation dans la css. Les font ne doivent plus être utilisées depuis que les css existent ...
Marsh Posté le 10-07-2005 à 17:43:55
Pour gatsusat: Ça sauve de la bande passante, c'est très esthétique et pratiques.
Pour plainsofpain: Ça ne règle pas mon problème, j'obtimiserai plus tard, si mon code fonctionne.
On dirait que personne ne trouve! Ça doit pas être si compliquer.
Marsh Posté le 10-07-2005 à 18:26:13
putain sauver de la bande passante? ??? mais t'es ravagé ?
pour le peu ke tu sauve, encore il faudrait mieux que tu le fasse en AJAX (XmlHttprequest) ca serait encore plus propre.
Parce que là franchement, j'ai jamais vu une idée aussi débile.
Mais bon, ca veut aussi dire que ton menu fait 10 km de long si tu veux passer par une solution aussi bancale
Marsh Posté le 10-07-2005 à 18:42:09
darkkrab a écrit : Ça sauve de la bande passante |
Montre donc le code des pages HTML qu'on se marre
Marsh Posté le 10-07-2005 à 19:06:49
Avec un site de plus de 200 000 users on a intérêts à optimiser, même si on sauve peu par personne. Pouvez-vous répondre à la question ou seulement insulter les gens?
Marsh Posté le 10-07-2005 à 19:17:08
bah si tu comptes mettre 200 000 User sur ton site laisse moi t'apprendre 2 choses :
1- les iframes ca existe pas, c'est pas fait pour faire des sites Internet, au pire tu utilise ca dans un intranet, mais bon ca fera plus de caca qu'autre chose.
2- faire un menu c'est bien, le faire en Javascript totalement c'est moins bien, ca rend ton site moins accessible, et vu le nombre de personnes ke tu vises c'est foutu d'avance
3- utiliser des iframes dans un menu j'appelle cela de l'héresie et de la pure folie.
4- Si tu veux qu'on taide on voudrait bien un bout de ton code HTML ca nous permettra de voir les interaction entre le JS et le HTML
5- un lien vers ton exemple ca serait un mega plus je pense.
6- C'est pas en utilisant des grigri bancales qu'on optimise un site avec 200 000 users
Marsh Posté le 10-07-2005 à 19:23:56
J'utilise les iframes pour le forum seulement et c'est seulement une option plus agréable lors de la navigation.
Je tente seulement de faire fonctionner mon script ci-haut totalement avant de l'optimiser, rien d'autre. Vous n'avez pas besoin d'un bout de mon code html pour ce faire. Faîtes copier-coller le script et essayer de comprendre.
Marsh Posté le 10-07-2005 à 20:15:30
déjà un code comme ca c'est plus mieux on va dire :
J'ai commenté un strict minimum
le but du jeu ici est de ne pas initialiser le SRC de liframe, mais initialiser ce SRC lorsque on affiche cet iframe. C'est plus intelligent.
tu verra aussi que je fais du JS non intrusif, et ce code est beaucoup plus propre que la bouse que tu m'a pondu.
au passage tu mettra tous dans les CSS
genre la class switchcontent doit contenir tout ce qui concerne la mise en forme de l'iframe
PS : s'il te plait prend exemple là dessus et fait un code propre merci. JE ne donne pas cher du code final
si tu veux optimiser la bande passante, commence déjà par optimiser le code HTML
Code :
|
Marsh Posté le 10-07-2005 à 20:30:46
C'est plus court, mais au téléchargement de la page, toutes les iframes s'ouvrent (pas très esthétique) et ça ne règle pas mon problème. Je voudrais que les ifames ne se téléchargent pas d'avance.
Merci quant même.
Marsh Posté le 10-07-2005 à 20:45:51
mon dieu
les iframes ne se telechargent puisque il n'y a pas de SRC=""
et donc ces iframe ne sont pas chargées. Tu comprend ou je dois te faire un Dessin ?
dans mon code je ne charge la page attachée à l'iframe que lorsque celle-ci s'affiche.
et j'ai ajouté un code JS ki cache toutes les iframes automatiquement dès l'ouverture de la page
fais un copier coller de ce code dans ton navigateur
au passage il faut que ton javascript soit activé.
IE block le javascript lors de la premiere ouverture de la page.
teste aussi avec firefox tu verras.
d'après toi si j'ai fais ca c'est pour me branler ?
function hideAlliframe() {
if(!document.getElementsByTagName)
return;
var MenuIframes = document.getElementsByTagName('IFRAME');
for(var i=MenuIframes.length-1; i>=0; --i)
if(MenuIframes[i].className.indexOf('switchcontent') != -1) {
MenuIframes[i].style.display = "none";
}
}
dis moi, une fois ke la page est chargée, les iframes sont cachées ou non ?
Marsh Posté le 10-07-2005 à 20:48:43
Quand je lis ce genre de message je me dis que franchement un acces a la profession serait benefique ... Mon dieu le boulet...
Marsh Posté le 10-07-2005 à 20:52:06
darkkrab a écrit : Avec un site de plus de 200 000 users on a intérêts à optimiser, même si on sauve peu par personne. |
Et c'est sûrement pas avec des iframes qu'on optimise, surtout quand on a une mise en page composée uniquement de tables (ce qui est probablement ton cas).
Tu veux des sites avec beaucoup d'utilisateurs? va voir du côté de Sourceforge, Fark ou Slashdot, ça ce sont des sites avec des utilisateurs...
Et ils n'ont, étrangement, pas de frames
Marsh Posté le 10-07-2005 à 20:52:50
les message de qui ?? de moi ?
tiens pour toi darkkrab j'ai fait encore plus cours avec iframe cachées dès le début (et vi tu verifieras la class switchcontent) comme un boulet je faisait appel à une fonction alors que j'avais juste à rajouter un teste dans ma fonction showhideiframe
Code :
|
Marsh Posté le 10-07-2005 à 20:55:07
on pourrai meme encore faire plus bourrin en rajoutant des nodes au dom mais bon po le courage ce soir
Marsh Posté le 10-07-2005 à 20:57:16
gatsusat a écrit : on pourrai meme encore faire plus bourrin en rajoutant des nodes au dom mais bon po le courage ce soir |
non pas de toi .. Meme si moi j'aurais pas pris la peine de perdre du temps a utiliser des iframes comme tu l'as fait .. non je parle du gugus qui se prend pour dieu et qui viens ici poser des questions stupides sur un code immonde
Marsh Posté le 10-07-2005 à 20:59:50
ben en fait j'ai surtout fait ca pour bien comprendre le JS non obstrusif. Bon pour le moment ca se limite à la modification des tags existant, la prochaine fois je m'attaque aux nodes du dom
m'enfin bon je lui ai dit 50 fois que c'était stupide d'utiliser des iframes, mais il veut rien savoir
et vu la manière dont il code, il peut arrêter de coder tout de suite.
M'enfin je lui ai divisé par 2 voire le nombre de lignes, et je suis sur qu'on peut encore mieux faire
Mais voila monsieur n'est pas content, et c'est pas lui qui va aller se casser le cul apparament
Marsh Posté le 10-07-2005 à 21:04:06
Justement, ce genre de boulet faut pas le renseigner, comme ca a l'usure il va p-e comprendre qu'il fonce dans un mur
Marsh Posté le 10-07-2005 à 21:06:42
ben jvois les choses différement, si a la rigueur on lui montre quelque chose de tout beau peut etre qu'il comprendra
mais je crois ke je my prend mal, jvais faire comme toi esox_ch
mais bon j'ai fais ca aussi sur un autre topic, le boulet je lui ai fait toute son integration graphique en CSS. et ce con il utilisait dreamweaver en Wysiwyg mon dieuuuuuuuuuuuuu
bon oki javais fait une tite gaffe dans mon code
mais ce con avec zapé un truc dans le code, un debut de div ak id erf. il merite des coups de boules et vu comment il a sacagé mon menu, c'est encore pire
yavait un strong par ligne dans les LI meme po foutu de foutre du gras via la CSS
Marsh Posté le 10-07-2005 à 21:10:37
Parcontre, un conseil, essaie d'ecrire plus en français ... Meme moi qui fais 5 fautes par mot j'ai de la peine a te comprendre ... alors je m'imagine mal les autres
Marsh Posté le 10-07-2005 à 21:12:21
Ton nouveau code fonctionne, mais pas l'ancien, pour te prouver le problème:
Met une page appeler mapagehtml1.html à coté des la page contenant le script. Dans cette page met une image. Vide le dossier 'C:\Documents and Settings\Propriétaire\Local Settings\Temporary Internet Files' et ouvre la page avec le script. Tu va voir que ton ancien script téléchargeait toutes les iframes d'avance et que les iframes souvraient.
Merci.
Marsh Posté le 10-07-2005 à 21:12:24
Ouais là j'ai même pas pris la peine de faire gaffe à l'orthographe et à la grammaire, on va dire que j'étais pressé, promis esox_ch.
et dire que je suis le premier à gueuler sur la grammaire et l'orthographe
Marsh Posté le 10-07-2005 à 21:16:44
Les iframes sont pour ceux qui veulent les utiliser parmis les users, où est le problème? À moins que vous ayez une idée plus compacte pour faire suivre des post sans tous les préloader d'avance et sans changer de page (visuellement).
Marsh Posté le 10-07-2005 à 21:20:11
XMLHttpRequest
http://www.openweb.eu.org/articles [...] tprequest/
tu as du apprendre à faire des sites web dans une pochette surprise
Marsh Posté le 10-07-2005 à 21:23:11
darkkrab a écrit : Les iframes sont pour ceux qui veulent les utiliser parmis les users, où est le problème? À moins que vous ayez une idée plus compacte pour faire suivre des post sans tous les préloader d'avance et sans changer de page (visuellement). |
xmlHttpRequest si l'utilisateur l'active
Parce que là il se passe quoi si, par exemple, mon navigateur ne gère pas les frames/iframes?
Marsh Posté le 10-07-2005 à 21:28:32
Pour gatsusat: Désolé de pas avoir pensé au XMLHttpRequest.
Pour Masklinn: La navigation traditionelle.
Marsh Posté le 10-07-2005 à 21:31:49
et tu fais comment pour passer à la navigation traditionnelle si le mec n'a pas le JS d'activé ?
le mieux serait que tu recode toute ce qui est JS sur ton forum de la manière dont je l'ai fait.
D'abord tu tassure que ton forum fonctionne parfaitement sans javascript
ensuite tu lui colle une couche javascript comme je te l'ai montré
Marsh Posté le 10-07-2005 à 21:37:31
C'est une des choses que j'ai envisagé de faire. Mon premier post commence par 'J'essai de réécrire'. J'essai de rendre mon forum interactif pour ceux qui le supporte et pour les autres, la navigation traditionnelle. C'est simple et efficace.
Marsh Posté le 10-07-2005 à 21:40:03
ben tu as la solution toute faite entre les mains car le code que tu avais avant, je sais pas qui l'avait ecrit mais il était mega bancal
Marsh Posté le 10-07-2005 à 21:42:15
J'avais remarquer. Mais je fait tout le temps des petites retouche avec le temps.
Marsh Posté le 10-07-2005 à 21:46:36
ben on va dire que j'ai jamais vu un code aussi crade lol
Marsh Posté le 10-07-2005 à 22:05:29
darkkrab a écrit : Je suis sûr que t'as vu pire, sérieusement. |
Laisse, il a les hormones qui se déclenchent, il est en pleine puberté alors il s'excite tout seul.
Histoire d'être un peu constructif:
Pour un chargement progressif il y a en fait deux possibilités pas trop trop crade et non obtrusive.
Legacy => tu charges ta page, et via javascript et si la chose est possible tu crées une iframes cachée. Pas deux, une seule. Cette iFrame sera utilisée pour effectuer des échanges entre la page locale et le serveur: tu changes sa "location.href" (par ce dont tu as besoin), ça va chercher une page donnée, puis un onload dans la page chargée va utiliser ces données pour modifier la page contenant l'iframe via manipulations du DOM.
Moderne => beaucoup plus propre mais un peu moins supporté, tu utilises xmlHttpRequest pour effectuer tes requêtes de données. Ca te permet de faire transiter des requêtes plus complexes et de garder un DOM propre (puisque tu n'as pas besoin de créer une iframe de communication). De même, l'utilisateur charge initialement une page normale et un script onload va la modifier afin de permettre l'utilisation d'xmlHttpRequest
Google Style.
Google, dans ses produits Gmail et Google Suggests, utilise ce genre de choses. Leur approche visant la compatibilité, ils l'effectuent ainsi:
1- Une page fonctionnelle
2- Un script au chargement qui teste la possibilité d'utiliser xmlHttpRequest et lance la procédure pour le mettre en place si dispo
3- Si l'étape précédente a raté, un script équivalent tente de mettre en place une iframe cachée
4- Si l'étape 3 rate, l'utilisateur garde sa page classique fonctionnelle.
Par contre il y a une chose à laquelle il faut faire TRES attention quand on utilise ce genre de choses: les liens&urls.
Tu te dois, quand tu mets en place ces trucs, de fournir à l'utilisateur des permalinks et une documentation afin qu'il puisse toujours bookmarker un post ou un thread précis... alors qu'il ne change en fait jamais de page. C'est probablement le plus gros problème avec le fait que les boutons PRECEDENT et SUIVANT deviennent inutilisable.
En fait, le gros inconvénient de cette méthode est qu'un certain nombre de fonctionalités basiques et standard du navigateur sont littéralement détruites (c'est pareil quand tu utilises des iframes comme tu le fais btw).
Après, c'est une question de balance entre ce que ça apporte à toi et surtout à tes utilisateurs et ce que ça vous coûte (à toi et - là encore - à tes utilisateurs).
Marsh Posté le 10-07-2005 à 22:13:49
Je sais que je dois désactiver la navigation précédant et suivant, de toute façon, un site bien conçu, n'en a pas besoins. En passant, avant qu'on me fasse des reproches, je sais que certaines personnes aiment bien ces fonctions (précédant et suivant).
Marsh Posté le 10-07-2005 à 22:16:26
darkkrab a écrit : un site bien conçu, n'en a pas besoins. |
WTF
Marsh Posté le 11-07-2005 à 09:24:20
darkkrab a écrit : Je sais que je dois désactiver la navigation précédant et suivant, de toute façon, un site bien conçu, n'en a pas besoins. |
MAMANNNNNNNNN
Marsh Posté le 10-07-2005 à 02:03:22
J'essai de réécrire un script en javascript pour une sorte de forum avec des messages. Le but est de faire un ''Dropdown'' menu avec des iframes. Jusque là, ça va, mais le problème est que je veux que les iframes ne se télécharge pas à l'avance, pour sauver de la bande passante. Avec Netscape, pas de problème, les iframes ne se télécharge pas à l'avance lorsqu'elles sont cachées. Cependant, avec Mozilla 'Firefox' et Internet Explorer elle se télécharge à l'ouverture de la page principale.
J'ai essayé de mettre src='about:blank' dans les ifames, mais ça cause 2 problèmes:
1)Mon script ne fonctionne qu'une fois avec Netscape.
2)Ça semble pas vouloir s'afficher si on insert la page principale dans une ifame. (Oui, je sais, j'adore les iframes)
Solution envisagés:
J'ai essayé de mettre un temps d'attente (avec SetTimeOut) avant le rechargement des iframes, marche pas vraiment.
J'ai essayé de mettre le lien des pages directement dans les src des iframes, IE preload les iframes, pas le but recherché.
J'en est conclu que je ne pouvais pas mettre src='about:blank' dans les iframes à cause de Netscape et que si je mets src='lapage.htm', Mozilla et Internet Explorer vont précharger les pages d'avance.
Voilà où j'en suis rendu avec mon script, une aide serait fortement apprécier.
---------------------------------------------------------------------------------------------------------------------------------------------<html>
<head>
<script type="text/javascript">
<!--
var enablepersist="off"
var collapseprevious="no"
if (document.getElementById){
document.write('<style type="text/css">.switchcontent{display:none;}</style>')
}
function getElementbyClass(classname){
ccollect=new Array()
var inc=0
var alltags=document.all? document.all : document.getElementsByTagName("*" )
for (i=0; i<alltags.length; i++){
if (alltags[i].className==classname)
ccollect[inc++]=alltags[i]
}
}
function contractcontent(omit){
var inc=0
while (ccollect[inc]){
if (ccollect[inc].id!=omit)
ccollect[inc].style.display="none"
inc++
}
}
function expandcontent(cid){
if (typeof ccollect!="undefined" ){
if (collapseprevious=="yes" )
contractcontent(cid)
document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block" )? "block" : "none"
}
}
function revivecontent(){
contractcontent("omitnothing" )
selectedItem=getselectedItem()
selectedComponents=selectedItem.split("|" )
for (i=0; i<selectedComponents.length-1; i++)
document.getElementById(selectedComponents[i]).style.display="block"
}
function get_cookie(Name) {
var search = Name + "="
var returnvalue = "";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search)
if (offset != -1) {
offset += search.length
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset, end))
}
}
return returnvalue;
}
function getselectedItem(){
if (get_cookie(window.location.pathname) != "" ){
selectedItem=get_cookie(window.location.pathname)
return selectedItem
}
else
return ""
}
function saveswitchstate(){
var inc=0, selectedItem=""
while (ccollect[inc]){
if (ccollect[inc].style.display=="block" )
selectedItem+=ccollect[inc].id+"|"
inc++
}
document.cookie=window.location.pathname+"="+selectedItem
}
function do_onload(){
uniqueidn=window.location.pathname+"firsttimeload"
getElementbyClass("switchcontent" )
if (enablepersist=="on" && typeof ccollect!="undefined" ){
document.cookie=(get_cookie(uniqueidn)=="" )? uniqueidn+"=1" : uniqueidn+"=0"
firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0
if (!firsttimeload)
revivecontent()
}
}
if (window.addEventListener)
window.addEventListener("load", do_onload, false)
else if (window.attachEvent)
window.attachEvent("onload", do_onload)
else if (document.getElementById)
window.onload=do_onload
if (enablepersist=="on" && document.getElementById)
window.onunload=saveswitchstate
//-->
</script>
<script type="text/javascript">
<!--
function reloadifr(ifr,redi){
top.frames[ifr].location.href = redi
}
//-->
</script>
</head>
<body>
<font onClick="expandcontent('sc1');reloadifr('sc1','message_int1.htm')" class="gmessa">Nom du post 1</font><br>
<div id="sc1" class="switchcontent">
<iframe name="sc1" width=99% height=205 src="about:blank" style="border:2px #990000 solid;" frameborder="no" marginwidth=10 marginheight=10></iframe>
</div><br>
<font onClick="expandcontent('sc2');reloadifr('sc2','message_int2.htm')" class="gmessa">Nom du post 2</font><br>
<div id="sc2" class="switchcontent">
<iframe name="sc2" width=99% height=205 src="about:blank" style="border:2px #990000 solid;" frameborder="no" marginwidth=10 marginheight=10></iframe>
</div><br>
<font onClick="expandcontent('sc3');reloadifr('sc3','message_int3.htm')" class="gmessa">Nom du post 3</font><br>
<div id="sc3" class="switchcontent">
<iframe name="sc3" width=99% height=205 src="about:blank" style="border:2px #990000 solid;" frameborder="no" marginwidth=10 marginheight=10></iframe>
</div><br>
<font onClick="expandcontent('sc4');reloadifr('sc4','message_int4.htm')" class="gmessa">Nom du post 4</font><br>
<div id="sc4" class="switchcontent">
<iframe name="sc4" width=99% height=205 src="about:blank" style="border:2px #990000 solid;" frameborder="no" marginwidth=10 marginheight=10></iframe>
</div><br>
</body>
</html>
-------------------------------------------------------------------------------------------------------------------------------------------