Url et frames, quelques petits problèmes

Signaler
Messages postés
12
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
18 mars 2007
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonjours,

Je poste sur ce forum pour vous énoncer mes problèmes auquel je n'ai pas réussi à trouver de solution, autant en passant par google qu'en cherchant par mot clé sur ce forum.

Le premier de mes soucis, je pense qu'il doit être assez connu :
Mon site personnel est composé de 2 frames, une à gauche qui sert de menu et qui est fixe, et celle de droite qui est la frame principale de navigation. Si on commence la navigation à partir de l'index tout va bien on peut aller n'importe où sans qu'une ombre se pointe. Mais lorsque je veux par exemple envoyer l'url d'une page particulière à quelqu'un (url de la frame de droite), il se retrouve effectivement dans la frame de droite mais sans la barre de menu a gauche! Le même problème étant qu'en visitant mes pages via google, on atterri sur une frame seule sans qu'il y ait le menu qui s'affiche.

Ma question après ce long discours est donc : Existe il un script permettant de réaffichant le jeu de frame originel? Mais sans que ça revienne à l'index.

Mon deuxième problème, peut être plus simple mais qui est lié au premier :
Quand je navigue sur mon site, l'url présente dans la barre du navigateur reste fixe (ex : http://monsite.com), et cela sur toutes les pages.

Ma question est donc : Comment je fais pour que l'url de la frame de navigation apparaisse dans la barre du navigateur?

Je précise que mon site est hebergé chez free, et que mon site est fait en html avec css et javascript, et surtout que je suis encore un novice en la matière. Je me permet de laisser l'url de mon site au cas ou vous voudriez visualiser le problème (pas pour faire de la pub, ça ne m'apporte rien), http://myrmecophoto.free.fr

Je vous remercie d'avance,

Cédric R.

18 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
Bonjour,
    il y a eu portant pas mal de réponses à ces sujets sur ce forum.
    pour la 1ère question : tester si on est dans une [i]frame, sinon rediriger.
<hr />


Cordialement            Bul         [mon Site]     [M'écrire]           




<hr />
Messages postés
12
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
18 mars 2007

Bonjour,

Avant tout, merci de votre réponse.
Concernant le sujet, j'ai une nouvelle fois cherché en emplyant d'autres mots clés, et je ne suis toujours pas arrivé à trouver une solution qui fonctionne. J'ai vu des bouts de codes qui ressemblaient a ceci :
parent.nom_frame
Mais rien n'a fonctionné, pas le moindre changement.

Pour le deuxième problème je n'ai pas cherché, il se peut que je dois changer complètement la façon dont on navigue sur le site (plus de frame.

Excusez mon niveau, mais je n'ai pas trop compris ce que vous aviez dit dans cette phrase :"tester si on est dans une [i]frame, sinon rediriger."
J'ai fais des recherches sur ceque veut dire iframe. Mon site n'a pas de iframe, et je ne pense pas en mettre car les dimensions sont limitées, ce qui ne m'arange pas du tout. Que vouliez vous dire par "rediriger"?

Si vous avez une piste sur laquelle je peux chercher, un tutorial ou autre, j'en serait très reconnaissant.

Merci encore,

Cédric R.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>savoir en javascript si la page est ouverte dans une frame ou pas
    comparer self.location.href  et  window.top.location.href   
...enfin, par exemple.



>>redirection
    location.href="page voulue"     ...enfin, par exemple.
<hr />


Cordialement            Bul         [mon Site]     [M'écrire]        




<hr />
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
un ch'tit exemple.. peut-être ?














    f0.htm   la page principale


<hr size="2" width="100%" />

<frameset     rows="40%,*">
    <frame    src="f1.htm" />
    <frame     src="f2.htm" />
</frameset>


<hr size="2" width="100%" />



    f1.htm   la 1ère page  qui ne fait qu'afficher les variables dont on causait, pour l'exemple.


<hr size="2" width="100%" />

f1

<script type="text/javascript">
    document.writeln("self:"+self.location.href+"
"+
                            "top:"+window.top.location.href);
</script>


<hr size="2" width="100%" />



    f2.htm   la page qui relance f0.htm si elle n'est pas dans une frame



<hr size="2" width="100%" />

f2

<script type="text/javascript">
    if ( self.location.href==window.top.location.href ) location.href="f0.htm";
</script>


<hr size="2" width="100%" />


        donc, si on lance f0.htm : tout va bien.
        si on lance directement f2.htm, ça recharge f0.htm
        ( peut être voir avec replace d'ailleurs )

<hr />


Cordialement            Bul         [mon Site]     [M'écrire]           




<hr />
Messages postés
12
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
18 mars 2007

Merci encore pour vos réponses rapides,

Mais cette technique m'enverra alors toujours sur f0 qui enverra elle même toujours sur les 2 même pages, si j'ai par exemple f3, ca enverra sur f0 qui recrera les frames f1 et f2. La solution serait donc de créer une page de jeu de frame (comme f0) pour chacune des page j'ai créé?

Surtout arrêtez moi si je me trompe...

Cédric R.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
faire le test dans chaque page f2,f3,f4.... bien sûr
    ( mais avec un .js pas un gros boulot )

relancer f0 en lui passant en paramètre la frame à réafficher
   

location.href="f0.htm/?"+nom de la page à utiliser;

  f0 récupèrera l'info avec window.location.search ( ? compris )
    il lui suffira de mettre à jour le .src du frame.




<hr />



Cordialement            Bul         [mon Site]     [M'écrire]           




<hr />
Messages postés
12
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
18 mars 2007

J'ai inclut les codes donnés dans les pages : f0, f1, f2 et f4. Je fais le test avec f4 pour être sûr que ca fonctionne
Et bisarrement ca ne fonctionne pas, la page f4 s'affiche comme si ne rien n'était. Par contre je crois reconnaître une erreur dans la f1, je vois ceci qui s'affiche :

self:file:///G:/myrmecophoto%20v3/f1.htm
top:file:///G:/myrmecophoto%20v3/f0.htm






Pour infos, tous ces codes doivent bien se mettre entre </head> et ?

Merci encore pour votre aide,

Cédric R.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>> bizarrement ca ne fonctionne pas

    ah... et comment peut-on répondre sans rien voir ?  
    car pour moi : ça baigne.

    nous donner un extrait des dites pages  ( les quelques lignes
       ! style mon exemplepas plus. pas des pages et des pages ! )
   
>>tous ces codes doivent bien se mettre entre </head> et ?
    aucune importance.  
    la coutume est de mettre les function entre <head> et </head>,
    le corps derrière
    le seul point à respecter c'est de ne pas oublier que le html/javascript
       est interprété, lignes par lignes dans l'ordre.... et qu'on ne peut pas
       utiliser un élément non encore interprété.




<hr />



Cordialement            Bul         [mon Site]     [M'écrire]           




<hr />
Messages postés
12
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
18 mars 2007

Bonjour,

Je vous met quelques lignes, désolé de ne pas les avoir mises plus tôt :

f0 = => index.htm
<hr size="2" width="100%" /> <frameset rows="*" cols="110,*" framespacing="0" frameborder="NO" border="0">
  <frame src="menu.htm" name="leftFrame" scrolling="NO" noresize>
  <frame src="accueil.htm" name="mainFrame">
</frameset>

f1 ==> menu.htm
<hr size="2" width="100%" /><script type="text/javascript">
    document.writeln("self:"+self.location.href+"
"+
                            "top:"+window.top.location.href);
</script>

f2 ==> accueil.htm
<hr size ="2" width="100%" /><script type="text/javascript">
    if ( self.location.href==window.top.location.href ) location.href="index.htm"+leftFrame;
</script>

f3 ==> news.htm
<hr size="2" width="100%" /><script type="text/javascript">
    if ( self.location.href==window.top.location.href ) location.href="index.htm/?"+leftFrame;
</script>

Et voilà, je dois sûrement avoir pleins de fautes...
Merci encore de votre attention

Cédric R.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>je dois sûrement avoir pleins de fautes...

        pas tant que cela...







les petites erreurs :

<hr size= "2" width="100%" />
    °°°    "index.htm/?"+leftFrame;

        certes... mais leftFrame c'est quoi ? pour javascript : un objet.
            et pas du tout "la page" ( contenue dans cette frame ).

        de plus si on lance directement f2 ou f3 ? leftFrame est indéfini
           votre navigateur doit donner une erreur, c'est sûr (?)

       regardez donc self.location.pathname
            
    [ uniquement ce qui est derrière le dernier / ( lastIndexOf  ? )


                     et unescape servira probablement ]

<hr size ="2" width="100%" />
    °°° dans index.htm rien pour tester la frame qu'il faut "ré"afficher ?

           si on lance index.htm/?toto.htm
               window.location.search c'est "?toto.htm"
               il faut donc, par exemple, dans index.htm faire un document.write
                    du  frameset, et des frames, avec le src de mainFrame=ce qui a été
                    reçu ( ou une valeur par défaut ? ) par exemple.

<hr size="2" width="100%" />
la plupart des intervenants sur CodesSources pourraient
        vous pondre une solution... mais... qu'apprendriez-vous ?

    maintenant, si vous y tenez , si vous ne vous en sortez pas, 
        je ( et pas moi seulement ) peux vous mettre un exemple




<hr />



Cordialement            Bul         [mon Site]     [M'écrire]        




<hr />
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
à propos...
Avec Internet Explorer, activer le deboggage,  et mieux, télécharger le "Debogger IE"
Avec FireFox, regarder la "console d'erreurs", et mieux, télécharger FireBug
<hr />


Cordialement            Bul         [mon Site]     [M'écrire]           




<hr />
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
euh... je voulais dire :


Avec |
|
et
mieux, télécharger
|

----

Internet
Explorer,
activer
le deboggage,
mon Site]         [M'écrire]</gras>



<hr />
Messages postés
12
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
18 mars 2007

J'ai installé les 2 modules comme conseillé pour firefox et IE. Ca à l'air vraiment complet, il y a même des erreurs sur mon site que je ne savais pas...

J'avoue en fait que la tache est vraiment compliqué... Mais je vais persévéré encore avant de donner ma langue au chat.
Le problème étant déjà que je ne sais absolument pas ce que veux dire bon nombre de fonction, comme par exemple tout ce que vous m'avez listé (document.write, self.location.pathname, lastIndexOf, etc.). Donc ne connaissant pas le code, ne sachant pas ce qu'il veut dire, j'ai du mal à savoir interpréter les choses et donc à les mettre en oeuvre comme il faut...

Pour commencer, que veut dire self.location.pathname, lastIndexOf etunescape, ou dois je le mettre en règle général?

Et pour le document.write à mettre dans l'index.htm, je ne vois pas du tout ou le mettre, cette commande c'est du javascript c'est bien ça? (j'ai un peu honte à demander ça...)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
bon... y'a pu qu'à, alors...


<hr size="2" width="100%" />

    f0.htm        la page principale




<script type="text/javascript">
    var tmp = (window.location.search.length<2) ? 'f2.htm' : window.location.search.substring(1) ;
       // on prend le paramètre transmis et/ou "f2.htm" par défaut
    document.writeln(    '<frameset     rows="40%,*">'+
                            '    <frame    name="h"    id="h" src="f1.htm" />'+
                            '    <frame     name="b"    id="b" src="'+tmp+'" />'+
                            '</frameset>');
       // il y a d'autres solutions pour modifier le .src du frame !
</script>


<hr size="2" width="100%" />

    f1.htm       "le menu"




la page "f1"

&#9;[f2.htm lien vers f2]
&#9;[f3.htm lien vers f3]

<script type="text/javascript">
    // pour afficher un exemple, pas plus
    document.write("self :&#9;"+unescape(self.location.href)+"
top :&#9;"+unescape(window.top.location.href));
</script>


<hr size="2" width="100%" />

    f#.htm             les autres pages ( # de 2 à n )




la page f2
<script     type="text/javascript"
            src="js.js" /></script>


<hr size="2" width="100%" />

    js.js               le .js à inclure dans toutes les pages où la rédirection est désirée



    if ( self.location.href == window.top.location.href )
    {   // donc ici, ça veut dire que la page lancée, l'a été directement
        // et donc que le menu n'est pas présent
        var url=unescape(self.location.pathname);   // nom complet de la page elle même
        var adr=url.lastIndexOf("/");
        var url=url.substring(adr+1);               // nom ( f#.htm dans cet exemple )
        location.href="f0.htm?"+url;                // on charge f0.htm avec le nom de la "page actuelle"
    }



<hr size="2" width="100%" />


    ça devrait baigner, même si on peut sûrement mieux faire, améliorer, voir autrement.
    ( ne serait-ce que faire ça coté serveur, avec le langage sur le serveur, ce qui ne serait
       pas plus mal, car ici ça ne fonctionne que si javascript est activé ! )



<hr />



Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
Messages postés
12
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
18 mars 2007

Désolé dedevoir en arriver là .

J'ai fais tout ce qui est dit, j'ai copié les lignes de codes là ou il fallait, remplacé les f* par les vrai noms de pages, mais comme toujours il y a un hic...
Si je lance f0, f2 ou f3 j'ai ceci qui apparait dans mon anavigateur :

Sur la capture d'écran on ne voit pas bien mais il y a écrit :
la page "menu"

[file:///G:/myrmecophoto%20v3/accueil.htm lien vers accueil]
[file:///G:/myrmecophoto%20v3/news.htm lien vers news]

self : file:///G:/myrmecophoto v3/menu.htm
top : file:///G:/myrmecophoto v3/menu.htm

Ce qui s'affiche est en réalité f1 qui est autre que menu.htm
Il y a donc visiblement un problème avec f1 (menu).

Si je récapitule (pour la suite de ce que je vais écrire):
f0 = index.htm
f1 = menu.htm
f2 = accueil.htm
f3 = news.htm
js.js = jsframe.js

Et voilà ce que j'ai mis dans mes pages (en rouge ce que j'ai édité) :

f0 ==> index

<hr size="2" width="100%" /><script type="text/javascript">
var tmp = (window.location.search.length<2) ? 'accueil.htm' : window.location.search.substring(1) ;
// on prend le paramètre transmis et/ou "accueil.htm" par défaut
document.writeln( '<frameset rows="40%,*">'+
' <frame name="h" id="h" src="menu.htm" />'+
' <frame name="b" id="b" src="'+tmp+'" />'+
'</frameset>');
// il y a d'autres solutions pour modifier le .src du frame !
</script>

f1 ==> menu

<hr size="2" width="100%" />
la page "menu"

&#9;[accueil.htm lien vers accueil]
&#9;[news.htm lien vers news]

<script type="text/javascript">
// pour afficher un exemple, pas plus
document.write("self :&#9;"+unescape(self.location.href)+"
top :&#9;"+unescape(window.top.location.href));
</script>

f2 ==> accueil

<hr size="2" width="100%" />
la page accueil

<script type="text/javascript"
src="jsframe.js" /></script>

f3 ==> news

<hr size="2" width="100%" />
la page news

<script type="text/javascript"
src="jsframe.js" /></script>

js.js ==> jsframe.js

<hr size="2" width="100%" />// JavaScript Documentif

( self.location.href == window.top.location.href )
    {   // donc ici, ça veut dire que la page lancée, l'a été directement
        // et donc que le menu n'est pas présent
        var url=unescape(self.location.pathname);   // nom complet de la page elle même
        var adr=url.lastIndexOf("/");
        var url=url.substring(adr+1);               // nom ( #.htm dans cet exemple )
        location.href="index.htm?"+url;                // on charge index.htm avec le nom de la "page actuelle"
    }

Merci,

Cédric R.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
je ne vois qu'un problème :



dans jsframe.js





<hr size="2" width="100%" />


// JavaScript Documentif
( self.location.href == window.top.location.href )





...


pas de if. ==> boucle "do infernale"



// JavaScript Document
if  ( self.location.href == window.top.location.href )








ça devrait aller mieux ( j'ai essayé en ne rectifiant que ça, et ça baigne )




<hr />                Cordialement          Bul         [mon Site]     [M'écrire]<hr />
Messages postés
12
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
18 mars 2007

Bonjour!

Un gros gros merci pour vous dire que tout marche maintenant! j'ai un peu édité pour faire apparaître le menu à gauche au lieu d'au dessus.
Tout fonctionne nickel .

Je vais maintenant m'atteler au deuxième problème qui concerne les urls.

Merci encore,

Cédric R.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
si ça baigne : nickel chrome.
>>...deuxième problème qui concerne les urls...

        alors là, c'est sûr : cherchez dans ce forum.
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]<hr />