Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lien externe vers une page dans un site avec des frames

9 réponses
Avatar
Laurence
Bonjour,

Je viens de faire un site construit avec 3 frames (menu, titre et contenu),
et j'ai le problème "classique", je pense : je voudrais que les liens
extérieurs qui pointent vers une page précise de mon site (je pense
notamment à Google) ouvrent la page en question dans le frameset, et non pas
isolément - ce qui pose naturellement un problème pour la navigation, sans
même parler du design !

J'ai trouvé un code Javascript qui redirige la page seule vers le jeu de
frames, mais avec la homepage comme page de contenu (à mettre sur chacune
des pages de contenu) :

<SCRIPT Language="javascript">if
(parent.frames.length==0)parent.location.href="index.html"</SCRIPT>

et ça marche très bien. J'en ai trouvé un autre qui est censé rediriger de
la homepage vers la page cliquée, dans le jeu de frames (à écrire dans le
fichier qui contient la frameset), mais celui-ci ne fonctionne pas chez moi
:

<script language="JavaScript">
function getParms()
{
if(window.location.search.length > 1)
{
var parms = window.location.search.substring(1).split("&");
var parmList = new Array();
for(var i = 0; i < parms.length; i++)
{
parmList[i] = new Object;
parmList[i].name = parms[i].substring(0,parms[i].indexOf("="));
parmList[i].value = parms[i].substring(parms[i].indexOf("=")+1);
}
return parmList;
}
else return null;
}

function Controle()
{
var Parms = getParms();
if(Parms != null)
{
for(var i = 0; i < Parms.length; i++)
{
if (Parms[i].name=="page")
{
contenu.location=Parms[i].value
}
}
}
}
</script>

J'ai trouvé ces 2 scripts sur :
http://www.henri-ruch.ch/referencement/referencement_frames/referencement_frames.asp

L'auteur de ce script donne un exemple qui marche très bien, mais pour un
site à 2 frames seulement. Savez-vous si le problème se situe à ce niveau,
et si c'est le cas, ce que je devrais modifier dans ce script pour que ça
fonctionne ? Ou y a-t-il un bout de code que j'aurais dû "personnaliser"
avec un nom de fichier ? Ou what ?

Mon site : www.bogdanov.ch

Merci d'avance pour tout conseil ! :-)
Laurence

9 réponses

Avatar
ASM
Laurence wrote:
Bonjour,

Je viens de faire un site construit avec 3 frames (menu, titre et contenu),
et j'ai le problème "classique", je pense : je voudrais que les liens
extérieurs qui pointent vers une page précise de mon site (je pense
notamment à Google) ouvrent la page en question dans le frameset, et non pas
isolément - ce qui pose naturellement un problème pour la navigation, sans
même parler du design !

J'ai trouvé un code Javascript qui redirige la page seule vers le jeu de
frames, mais avec la homepage comme page de contenu (à mettre sur chacune
des pages de contenu) :

<SCRIPT Language="javascript">if
(parent.frames.length==0)parent.location.href="index.html"</SCRIPT>


Perso, je demande au JS de repérer si une de mes frames existe,
car on peut avoir sa page mise dans le frameset d'1 autre site de
recherche ou autre

Pour retrouver sa page dans la page de cadre et dans le bon cadre au
lieu de la home voici mon exemple :
http://perso.wanadoo.fr/stephane.moriaux/truc/re_routage_en_frame.htm
fontionne avec :
1) un script sur chaque page du site (ou le même en externe) qui :
- vérifie q'une des frames de son site existe
- se met en variable l'adresse de la page appelée (sa propre url)
- ouvre une fenêtre avec le frameset de son site
2) Le frameset a lui aussi un script qui :
- vérifie s'il n'a pas été appelé depuis une autre fenêtre
- si c'est le cas, récupére la variable de l'url de la page orpheline
- et la ré-ouvre dans le bon cadre

Lors du test-essai :
- récupérer la page dont lien ci-dessus
- récupérer la page index de cadres (et son script)
pour voir comment c'est foutu


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
Laurence
"ASM" a écrit dans le message de news:
42c47c78$0$900$
Laurence wrote:
Bonjour,

Je viens de faire un site construit avec 3 frames (menu, titre et
contenu), et j'ai le problème "classique", je pense : je voudrais que les
liens extérieurs qui pointent vers une page précise de mon site (je pense
notamment à Google) ouvrent la page en question dans le frameset, et non
pas isolément - ce qui pose naturellement un problème pour la navigation,
sans même parler du design !

J'ai trouvé un code Javascript qui redirige la page seule vers le jeu de
frames, mais avec la homepage comme page de contenu (à mettre sur chacune
des pages de contenu) :

<SCRIPT Language="javascript">if
(parent.frames.length==0)parent.location.href="index.html"</SCRIPT>


Perso, je demande au JS de repérer si une de mes frames existe,
car on peut avoir sa page mise dans le frameset d'1 autre site de
recherche ou autre

Pour retrouver sa page dans la page de cadre et dans le bon cadre au lieu
de la home voici mon exemple :
http://perso.wanadoo.fr/stephane.moriaux/truc/re_routage_en_frame.htm
fontionne avec :
1) un script sur chaque page du site (ou le même en externe) qui :
- vérifie q'une des frames de son site existe
- se met en variable l'adresse de la page appelée (sa propre url)
- ouvre une fenêtre avec le frameset de son site
2) Le frameset a lui aussi un script qui :
- vérifie s'il n'a pas été appelé depuis une autre fenêtre
- si c'est le cas, récupére la variable de l'url de la page orpheline
- et la ré-ouvre dans le bon cadre

Lors du test-essai :
- récupérer la page dont lien ci-dessus
- récupérer la page index de cadres (et son script)
pour voir comment c'est foutu


--
Stephane Moriaux et son [moins] vieux Mac


Merci beaucoup, je viens d'essayer tout ça ! J'ai deux problèmes : d'abord,
quand j'arrive sur la page "seule", une autre fenêtre tente effectivement de
s'ouvrir, mais elle est interprétée comme un pop-up publicitaire et bloquée
par I.E. (et Firefox, d'ailleurs). Et ensuite, quand je débloque
"manuellement" en autorisant les pop-ups, ça me mène à la page d'accueil
avec les frames, mais ça ne redirige pas vers la page sur laquelle je
pointais au départ avec ses frames, je reste "bloquée" à la page d'accueil.

Ca doit venir de moi, c'est exactement ce qu'il se passait avec la
combinaison de scripts précédente (que j'ai décrite dans mon premier post).
Si tu as envie de regarder, j'ai changé le script sur cette page :
http://www.bogdanov.ch/Bibliographie-accueil.htm
J'ai bien sûr ajouté le script adéquat sur ma page de frameset.

En tout cas, merci encore pour toutes tes explications !
Laurence


Avatar
ASM
Laurence wrote:

Merci beaucoup, je viens d'essayer tout ça ! J'ai deux problèmes : d'abord,
quand j'arrive sur la page "seule", une autre fenêtre tente effectivement de
s'ouvrir, mais elle est interprétée comme un pop-up publicitaire et bloquée
par I.E. (et Firefox, d'ailleurs).


Ha oui, c'est un pb ces anti pop-ups !
Ils n'existaient pas lors de la création de mon truc de replacement :-(

Préférer (ou rajouter) un bouton sur chaque page
proposant de replacer la page
Ce sera le bouton qui lancera le script au lieu que ça se fasse
automatiquement. Normalement si l'anti-popup n'est pas trop débile çà
doit rouler.

je reste "bloquée" à la page d'accueil.

Ca doit venir de moi,


En effet, tu as mal copié la fonction dans la page d'accueil :

function actualise(){
if(opener)
{
if(opener.mon_url)
{
parent.CadrePrincipal.location = opener.mon_url;
opener.close();
opener= false;
opener.mon_url = false;
}
}
else
^^^^ce else est à supprimer, c'est lui qui bloque
}


Si tu as envie de regarder, j'ai changé le script sur cette page :
http://www.bogdanov.ch/Bibliographie-accueil.htm
J'ai bien sûr ajouté le script adéquat sur ma page de frameset.


pas tout à fait ... :-/

Normalement il y a un temporisateur (4 secondes) pour laisser un peu de
temps à la page index de charger ces chéris avant d'appeler la page
visée, mais, vu que ton menu semble assez lourd, je ne sais si ça
suffira ...

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
Laurence
"ASM" a écrit dans le message de news:
42cc6976$0$22290$
Laurence wrote:

Merci beaucoup, je viens d'essayer tout ça ! J'ai deux problèmes :
d'abord, quand j'arrive sur la page "seule", une autre fenêtre tente
effectivement de s'ouvrir, mais elle est interprétée comme un pop-up
publicitaire et bloquée par I.E. (et Firefox, d'ailleurs).


Ha oui, c'est un pb ces anti pop-ups !
Ils n'existaient pas lors de la création de mon truc de replacement :-(

Préférer (ou rajouter) un bouton sur chaque page
proposant de replacer la page
Ce sera le bouton qui lancera le script au lieu que ça se fasse
automatiquement. Normalement si l'anti-popup n'est pas trop débile çà doit
rouler.

je reste "bloquée" à la page d'accueil.

Ca doit venir de moi,


En effet, tu as mal copié la fonction dans la page d'accueil :

OUI ! Effectivement j'ai enlevé le "else" en trop et ça marche ! :-))))) En

tout cas, ça marche parfaitement avec Firefox, Netscape et Safari ! Il n'y a
que cet imbécile d'I.E. avec ses mesures de sécurité de-la-mort-qui-tue qui
gâche tout... Il m'embêtait déjà pas mal en local : même l'effet roll-over
des boutons de mon menu lui pose un problème, à chaque fois il faut lui
préciser qu'il peut activer les scripts ! Mais heureusement ça ne fait pas
cet effet sur le Web, je ne sais pas pourquoi...

Y aurait-il quelque chose à faire pour que le frame s'ouvre dans la même
fenêtre que la page isolée, au lieu que le script ouvre une nouvelle fenêtre
qui va être considérée comme un pop-up publicitaire ?


Avatar
ASM
Laurence wrote:
Y aurait-il quelque chose à faire pour que le frame s'ouvre dans la même
fenêtre que la page isolée, au lieu que le script ouvre une nouvelle fenêtre
qui va être considérée comme un pop-up publicitaire ?


Le truc-bazard ouvre une nouvelle fenêtre car parfois la page appelée
peut déjà être dans une page de cadres.

De plus, le test du JS dans la page index est justement de vérifier
si oui ou non elle est ouverte dans une nouvelle fenêtre.
Si oui, alors on recharge la page appelée dans son caddre.

Si ça ne te gêne pas d'avoir ton site enfermé sans le vouloir dans le
site d'un autre (et qu'alors son adresse ne soit pas apparente) tu peux
faire ré-ouvrir dans même fenêtre

Sans doute la page appelée pourrait faire ouvrir l'index tout en passant
à cette dernière sa propre url.
Bien que non testé, voici comment :

pages lambda
si le cadre 'AFFICHEUR' n'existe pas
on charge dans même fenêtre qquechose qui ressemblera à :
http//monserveur/mon.site/index.htm?url='http//monserveur/mon.site/page01.htm'

script des pages lambda :

if(!parent.AFFICHEUR)
self.location = "http//monserveur/mon.site/index.htm?url='" +
self.location + "'";

script de la page index :

var url = false;
function replace() {
// extraction de ce que envoyé en + de l'url
// le truc du genre ?nom=Dupont
var adresse = self.location.search();
// on en enlève le '?'
adresse = adresse.substring(1,adresse.length)
// on demande au JS de l'évaluer -> récup du contenu de variable url
// -> url='http//monserveur/mon.site/page01.htm'
eval(adresse);
// si url existe on replace la page appelée
if(url) parent.AFFICHEUR.location = url;
}
setTimeout('replace()',4000);


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
Laurence
"ASM" a écrit dans le message de news:
42cd5bf2$0$1239$
Laurence wrote:
Y aurait-il quelque chose à faire pour que le frame s'ouvre dans la même
fenêtre que la page isolée, au lieu que le script ouvre une nouvelle
fenêtre qui va être considérée comme un pop-up publicitaire ?


Le truc-bazard ouvre une nouvelle fenêtre car parfois la page appelée
peut déjà être dans une page de cadres.

De plus, le test du JS dans la page index est justement de vérifier
si oui ou non elle est ouverte dans une nouvelle fenêtre.
Si oui, alors on recharge la page appelée dans son caddre.

Si ça ne te gêne pas d'avoir ton site enfermé sans le vouloir dans le site
d'un autre (et qu'alors son adresse ne soit pas apparente) tu peux faire
ré-ouvrir dans même fenêtre

Sans doute la page appelée pourrait faire ouvrir l'index tout en passant
à cette dernière sa propre url.
Bien que non testé, voici comment :

pages lambda
si le cadre 'AFFICHEUR' n'existe pas
on charge dans même fenêtre qquechose qui ressemblera à :
http//monserveur/mon.site/index.htm?url='http//monserveur/mon.site/page01.htm'

script des pages lambda :

if(!parent.AFFICHEUR)
self.location = "http//monserveur/mon.site/index.htm?url='" +
self.location + "'";

script de la page index :

var url = false;
function replace() {
// extraction de ce que envoyé en + de l'url
// le truc du genre ?nom=Dupont
var adresse = self.location.search();
// on en enlève le '?'
adresse = adresse.substring(1,adresse.length)
// on demande au JS de l'évaluer -> récup du contenu de variable url
// -> url='http//monserveur/mon.site/page01.htm'
eval(adresse);
// si url existe on replace la page appelée
if(url) parent.AFFICHEUR.location = url;
}
setTimeout('replace()',4000);


--
Stephane Moriaux et son [moins] vieux Mac


Là ça ne marche pas pour moi : ça me donne une page "not found" ! Tant pis,
je vais garder la version précédente, en espérant que les gens auront la
bonne idée d'autoriser l'ouverture de la soi-disant pop-up !

Merci mille fois, en tout cas, pour ton aide ! :-)
Laurence


Avatar
ASM
Laurence wrote:

Là ça ne marche pas pour moi : ça me donne une page "not found" !


correction :
(erreur : ce n'est pas truc.search(); mais truc.search; )

Sans doute la page appelée pourrait faire ouvrir l'index tout en passant
à cette dernière sa propre url.
Bien que non testé, voici comment :

pages lambda
si le cadre 'AFFICHEUR' n'existe pas
on charge dans même fenêtre qquechose qui ressemblera à :
http//monserveur/mon.site/index.htm?url='http//monserveur/mon.site/page01.htm'

script des pages lambda :

if(!parent.AFFICHEUR)
self.location = "http//monserveur/mon.site/index.htm?url='" +
self.location + "'";

script de la page index :

var url = false;
function replace() {
// extraction de ce que envoyé en + de l'url
// le truc du genre ?nom=Dupont
var adresse = self.location.search;
// on en enlève le '?'
adresse = adresse.substring(1,adresse.length)
// on demande au JS de l'évaluer -> récup du contenu de variable url
// -> url='http//monserveur/mon.site/page01.htm'
eval(adresse);
// si url existe on replace la page appelée
if(url) parent.AFFICHEUR.location = url;
}
setTimeout('replace()',4000);

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
Laurence
"ASM" a écrit dans le message de news:
42cecaba$0$25033$
Laurence wrote:

Là ça ne marche pas pour moi : ça me donne une page "not found" !


correction :
(erreur : ce n'est pas truc.search(); mais truc.search; )

Sans doute la page appelée pourrait faire ouvrir l'index tout en passant
à cette dernière sa propre url.
Bien que non testé, voici comment :

pages lambda
si le cadre 'AFFICHEUR' n'existe pas
on charge dans même fenêtre qquechose qui ressemblera à :
http//monserveur/mon.site/index.htm?url='http//monserveur/mon.site/page01.htm'

script des pages lambda :

if(!parent.AFFICHEUR)
self.location = "http//monserveur/mon.site/index.htm?url='" +
self.location + "'";

script de la page index :

var url = false;
function replace() {
// extraction de ce que envoyé en + de l'url
// le truc du genre ?nom=Dupont
var adresse = self.location.search;
// on en enlève le '?'
adresse = adresse.substring(1,adresse.length)
// on demande au JS de l'évaluer -> récup du contenu de variable url
// -> url='http//monserveur/mon.site/page01.htm'
eval(adresse);
// si url existe on replace la page appelée
if(url) parent.AFFICHEUR.location = url;
}
setTimeout('replace()',4000);

--
Stephane Moriaux et son [moins] vieux Mac


Ca ne marche toujours pas, même après correction, ça me donne toujours "404
not found". Mais ôte-moi d'un doute : tout ce que je dois changer, c'est
AFFICHEUR, ou je dois aussi adapter http//monserveur/mon.site/index.htm ? La
question doit te paraître bien naïve, mais comme tu l'auras compris je ne
connais rien à javascript ! :-)


Avatar
ASM
Laurence wrote:

Ca ne marche toujours pas, même après correction, ça me donne toujours "404
not found". Mais ôte-moi d'un doute : tout ce que je dois changer, c'est
AFFICHEUR, ou je dois aussi adapter http//monserveur/mon.site/index.htm ? La
question doit te paraître bien naïve, mais comme tu l'auras compris je ne
connais rien à javascript ! :-)


Oui tu changes AFFICHEUR par le nom de ton cadre (frame)

Oui tu indiques clairement l'adresse complète de ta page de cadres d'accueil
bien sûr, à la place de 'http//monserveur/mon.site/index.htm'

et encore 1 fois : je n'ai pas essayé moi-même !

--
Stephane Moriaux et son [moins] vieux Mac