begin process at 2012 02 14 10:04:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Frames

 > ALTERNATIVE CONVIVIALE AUX REDIRECTIONS SI FRAMES ABSENTS (V.2)

ALTERNATIVE CONVIVIALE AUX REDIRECTIONS SI FRAMES ABSENTS (V.2)


 Information sur la source

Note :
5 / 10 - par 2 personnes
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Frames Niveau :Débutant Date de création :20/07/2004 Date de mise à jour :13/12/2004 17:18:32 Vu :10 609

Auteur : olid

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Quand un site a des "frames", on s'inquiète des accés direct vers les pages des sous-cadres... C'est inévitable car les moteurs de recherche indexent toutes les pages (si bien référencé). Mais c'est pénalisant qu'une page ne soit plus accompagnée du menu et autres infos légales (nécessaires pour les sociétés).

La première démarche, c'est de mieux référencer sa page "index" en utilisant la balise "noframes" et autres astuces pour cacher du texte (pertinent) et/ou des liens vers les sous-pages... Mais SANS utiliser de Javascript ;op

QUELQUES WEBMASTERS FONT DES JAVASCRIPTS DE REDIRECTION pour renvoyer les accés directs aux sous-pages vers l'index... Mais les internautes détestent çà car ils doivent chercher (parfois longuement) pour retrouver leurs pages avec les infos qui les interressent :o(

ENCORE PIRE, certains bloquent le clic-droit pour emêcher d'ouvrir la page séparemment dans une nouvelle fenetre :o((

UNE ALTERNATIVE ET UN BON COMPROMIS POUR TOUS (webmaster et internautes)
Exemples sur ces sites :
www.rce-sa.com
www.netchallenge.fr (pour les actus)

Mes pages secondaires contiennent toutes un en-tête et un pied de page qui contienne un résumé du menu principal et/ou des mentions légales. Ils sont tous les 2 entre des balises DIV qui sont cachés par défaut (via le style "display: none")

Ensuite, un petit (et trés simple) javascript (compatible MSIE et Mozilla) cherche si la page est affichée dans des cadres... Dans le cas contraire, le JS va rendre l'entete et le pied de page visible :o)

NB: Mon JS a un petit défaut ; il affiche pas l'entete si la page est affichée dans le cadre dans un autre site... Il suffirait d'ajouter un deuxieme test pour détecter la présence de l'un de vos cadre principal ;op

EDIT: Le probléme ci-dessus est corrigé par la deuxieme version :o)


Source

  • <DIV id="EntetePageSeule" style="margin: 2px; width: 100%; overflow: hidden; margin-bottom: 5px; display: none" class="EntetePageSeule">
  • VOTRE ENTETE ICI
  • </DIV>
  • <SCRIPT language="JavaScript" type="text/javascript">
  • if ((document.getElementById) && (window.top.document.getElementById('EntetePageSeule')))
  • {
  • window.top.document.getElementById('EntetePageSeule').style.display="inline";
  • }
  • </SCRIPT>
  • <!-- VERSION 2 avec correction d'un bug des vieux MSIE, et prise en charge qd un site externe affiche votre page dans ses frames -->
  • <SCRIPT language="JavaScript" type="text/javascript">
  • //Recherche du frame parent avec interception des erreurs
  • try
  • {
  • //Test si navigateur récent avec support de "getElementById"
  • if ((document.getElementById) && (window.parent.document.getElementById('EntetePageSeule')))
  • {
  • //Si page affichée sans frames, le DIV devient visible
  • window.parent.document.getElementById('EntetePageSeule').style.display="inline";
  • }
  • }
  • //Si il y a eu une erreur (ex: page affichée dans le frame d'un autre site)
  • catch(e)
  • {
  • //Test si navigateur récent avec support de "getElementById"
  • if ((document.getElementById) && (window.document.getElementById('EntetePageSeule')))
  • {
  • //Le DIV devient visible
  • window.document.getElementById('EntetePageSeule').style.display="inline";
  • }
  • }
  • </SCRIPT>
<DIV id="EntetePageSeule" style="margin: 2px; width: 100%; overflow: hidden; margin-bottom: 5px; display: none" class="EntetePageSeule">
VOTRE ENTETE ICI
</DIV>
<SCRIPT language="JavaScript" type="text/javascript">
if ((document.getElementById) && (window.top.document.getElementById('EntetePageSeule')))
	{
	window.top.document.getElementById('EntetePageSeule').style.display="inline";
	}
</SCRIPT>

<!-- VERSION 2 avec correction d'un bug des vieux MSIE, et prise en charge qd un site externe affiche votre page dans ses frames -->
<SCRIPT language="JavaScript" type="text/javascript">
//Recherche du frame parent avec interception des erreurs
try
	{
	//Test si navigateur récent avec support de "getElementById"
	if ((document.getElementById) && (window.parent.document.getElementById('EntetePageSeule')))
		{
		//Si page affichée sans frames, le DIV devient visible
		window.parent.document.getElementById('EntetePageSeule').style.display="inline";
		}
	}
//Si il y a eu une erreur (ex: page affichée dans le frame d'un autre site)
catch(e)
	{
	//Test si navigateur récent avec support de "getElementById"
	if ((document.getElementById) && (window.document.getElementById('EntetePageSeule')))
		{
		//Le DIV devient visible
		window.document.getElementById('EntetePageSeule').style.display="inline";
		}
	}
</SCRIPT>

 Conclusion

Conseil:
Utilisez les includes du php pour insérer vos entetes ;o)


 Historique

20 juillet 2004 13:23:36 :
13 décembre 2004 17:18:33 :
Correction pour bug de MSIE + Prise en charge des sites externes

 Sources du même auteur

AFFICHAGE AGRÉABLE D'UNE DATE DE PUBLICATION (EN ANGLAIS)
CALCULER L'ARRONDI D'UN PRIX ET LE METTRE EN FORME POUR L'AF...
PETITE ASTUCE POUR DES TEXTAREA ENVAHISSANTS...
BARRE DE DÉFILEMENT (SCROLLBAR) QUI CHANGE DE COULEUR AU SUR...

 Sources de la même categorie

Source avec Zip Source avec une capture DIAPORAMA SIMPLE PAR IFRAME par sartoz
Source avec une capture CHARGER UNE PAGE WEB DANS UN DIV par flk974
DYNAMIC CONTENT DANS UNE DIV par duterte
INCLUDE EN JAVASCRIPT par yousfane
Source avec Zip PASSER DE FRAMES A UNE PAGE par David78390

Commentaires et avis

Commentaire de sarl_adc le 21/07/2004 16:56:39

Pas mal comme astuce !
Seul inconvénient (si je ne me trompe pas) c'est que tes pages doivent être un petit peu plus lourdes !

Je ne sais pas si je dis une bêtise, mais en PHP on pourrait effectuer un "include" d'une page contenant les en-têtes s'il n'y a pas de cadres. (?)

En tout cas, ton astuce, je la met de côté :)

Commentaire de olid le 21/07/2004 19:11:06

Reformule ta question pour l'include, je te comprend pô :o( ...  Il est pô possible en php de savoir si il y a des cadres (avant l'aarivée de la page). Et comme dans ma note finale, met le source tout seul dans un script php puis l'inclue le dans toutes tes pages pour pô avoir à tout changer quand tu fais une modif.

Sinon, l'entete s'affiche dés lors que la page n'est pas dans un cadre... Pour etre plus précis, c'est quand elle est au niveau TOP :o|

Etpis, pour le poid, c'est négligeable... Sauf si tu es un lourdo qui fait un gros menu avec plein d'image. Et encore, çà, çà peut s'arranger en utilisant une feuille de style pour construire l'entete ;o)

Commentaire de sarl_adc le 22/07/2004 09:18:49

En fait t'as raison, en PHP c'est pas faisable... Je pensais...

Mais sinon j'ai vu tes liens et c'est vrai que dans l'en-tête tu peux mettre seulement quelques lignes qui rappellent l'en-tête en simplifié. Par contre si tu as beaucoup d'images, ça oblige à les télécharger à nouveau (sauf si elles sont déjà ds le cache).

Mais ton astuce est bonne :)

Commentaire de olid le 22/07/2004 19:42:13

Elle est surtout simple et PROPRE... Jadore :o)

Utile aussi pour faire un site accessible pour les navigayeur special handicap... Tu met dans le NOFRAMES un lien vers l'accueil et grace à lentete contenant ton menu simplifié, zest tout nickel :o)

Heu...Pô oublier les NOEMBED qd ya du flash... Men manque encore sur le site RCE :o(

Commentaire de sarl_adc le 23/07/2004 11:08:57

En fait je parlais de PHP parce que mon site devait un peu fonctionner comme le tiens (toujours le menu présent, etc...) mais du coup je l'ai fait en PHP parce que j'ai pu intégrer un en-tête dans un entetepage.php, un pied de page dans un piedpage.php et les inclure au début et à la fin de chaque page de mon site.

Le seul inconvénient, c'est que je n'ai pas de frames (utiles parfois).

Commentaire de olid le 26/07/2004 11:12:45

Heu... Mais si tu n'as pas de frames, cette source te sert à rien, voyon !!! :o.

Ou alors, tu as des frames que sur certaine page ? ...Dans ce cas, fais ton include entre les DIV et utilise cette source que pour ces pages.

Si tu as peur du poid du menu... Cherche pour remplacer les DIV par un IFRAME ; mais cest pô trés propre, et difficile sous Mozilla :o|

Commentaire de olid le 29/07/2004 13:11:29

Jai trouvé un bug ! :o(((

On a une erreur Javascript (autorization refusée) quand la page est ouverte par un frame d'un autre site (nom de domaine different)... Ce qui est trés génant quand on utilise des sous-domaines, ou quon a un nom grace à un domaine virtuel comme ULimit, ou que son domaine est une redirection vers ses pages perso du FAI.

L'origine vient du fait que Javascript n'a pô le droit d'explorer des objets au niveau "window.top" quand celui-ci n'appartient pas au meme domaine (et sous-domaine).

Pour corriger, il faudrait mettre un test préalable pour comparer les domaines... Quelqun a une astuce à proposer ? :o|

Commentaire de olid le 13/12/2004 17:26:26

Correction des problemes de mon précédent post + une astuce pour afficher l'entete quand votre page est affichée dans le frame d'un autre site.

Comme j'ai remplacé le window.top par un window.parent, il ne devrait pas avoir de problemes pour les sites qui ont un nom de domaine avec une page (et son frame) de redirection.

Et bien sur, çà marche sous IE, FireFox, et les Mozilla Inside ;op

NB: Merci à ceux qui m'ont aidé sur le forum ; rttb et bultez

Commentaire de coucou747 le 13/12/2004 19:17:45 administrateur CS

ça ne bloque pas l'accès direct si on enlèvres javascript...

Sinon en php, le plus simple c'est de mettre le menu sur toutes les pages... comme sur mon site par exemple...

en php on peut aussi (si on veut garder les frames) mettre une sécuritée bien plus grande...

Commentaire de olid le 14/12/2004 14:10:04

C'est dommage qun tit coucou si jeune et deja doué perd son temps à croasser à tout vents... :o|

1/ ça ne bloque pas l'accès direct si on enlèvres javascript...

Tu permet que je copie-colle ta remarque à mon nom dans ta source qui propose de créer son menu principal entierement en JS ? ...Pour info, ici c'est un site dédié au Javascript :o))

2/ Sinon en php, le plus simple c'est de mettre le menu sur toutes les pages... comme sur mon site par exemple...

As tu vu que cette source est dédiée aux sites dont le menu est dans un frame séparé ?

3/ en php on peut aussi (si on veut garder les frames) mettre une sécuritée bien plus grande...

Moi et bien d'autres seraient ravis de la connaitre cette technique que je cherche depuis des lustres... Fais moà un post quand tu le publiera, et oublie pô de le breveter !!! :o|

Commentaire de coucou747 le 15/12/2004 15:06:39 administrateur CS

"oublie pô de le breveter !!! :o|"=> cela ne corresponds pas à ma philosophie : posséder une resource inépuisable sans la partager n'est pazs la posséder comme il se doit...

Bon bah dès que j'aurais un environement de travail digne de ce nom, je posterais ma sources dans la partie php...

sinon, je ne vois pas de quelle source tu parles... Ma source était en js, c'était un gros bloc de fonctions que j'ai aussi réécrits en php pour faire mon site, pour que les liens soient aussi vu par google..

J'ai vu a quoi ta osurce sert, mais le truc c'est que google référenceras mal un site qui présente une frame... (j'en ai une pour la redirection, et ça me fait déja chier...)

Commentaire de saturnin125 le 21/02/2007 19:01:33

Excelent conbiné avec ce script (trouvé sur le site) cela permet de n'afficher le bouton de redirection que lorsque la frame est absente !
le tous est a mettre entre les balise <head> </head> ;-)

<script language="JavaScript"><!--
function set_button() {
if (parent.location.href == self.location.href) {
    btn1.style.visibility="visible";}
    else {
    btn1.style.visibility="hidden";
    alert('Wouahhhh ! JavaScript ! \nand we did it...');}
    }
function show_frameset() {
if (parent.location.href == self.location.href) {
    window.location.replace('origine.htm?test.html');
    }}
//--></script>

<DIV id="EntetePageSeule" style="margin: 2px; width: 100%; overflow: hidden; margin-bottom: 5px; display: none" class="EntetePageSeule">
    <input type='button' name='btn1' style.visibility="hidden" value='Show this page in its original frameset' onclick='show_frameset()'>

   </DIV>
    <SCRIPT language="JavaScript" type="text/javascript">
   if ((document.getElementById) && (window.top.document.getElementById('EntetePageSeule')))
    {
    window.top.document.getElementById('EntetePageSeule').style.display="inline";
     }
     </SCRIPT>
    
     <!-- VERSION 2 avec correction d'un bug des vieux MSIE, et prise en charge qd un site externe affiche votre page dans ses frames -->
     <SCRIPT language="JavaScript" type="text/javascript">
     //Recherche du frame parent avec interception des erreurs
     try
     {
     //Test si navigateur récent avec support de "getElementById"
     if ((document.getElementById) && (window.parent.document.getElementById('EntetePageSeule')))
     {
     //Si page affichée sans frames, le DIV devient visible
     window.parent.document.getElementById('EntetePageSeule').style.display="inline";
     }
     }
     //Si il y a eu une erreur (ex: page affichée dans le frame d'un autre site)
     catch(e)
     {
     //Test si navigateur récent avec support de "getElementById"
     if ((document.getElementById) && (window.document.getElementById('EntetePageSeule')))
     {
     //Le DIV devient visible
     window.document.getElementById('EntetePageSeule').style.display="inline";
     }
     }
     </SCRIPT>



a+
saturnin

Commentaire de takali le 11/08/2009 10:01:49

Plus simple :

    <script type= »text/javascript »>
    if (top.frames.length=='0')
    {
    window.location.replace( »url-de-redirection »);

    }
    </script>

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,494 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales