Faire cohabiter 2 scripts

Le
MIMATA
Bonjour,

Que faut'il changer dans les 2 scripts ci-dessous pour que les 2
fonctions windows.onload fonctionnent ?

Voici le code de la page pour faire des tests :

<html>

<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>Accueil</title>
<link rel="stylesheet" type="text/css" media="screen"
href="http://xhtml.css.free.fr/_CSS/style.css" />

<script type="text/javascript">
<!-- Liens externes dans une nouvelle fenêtre -->
function externalLinks() {
if (!document.getElementsByTagName) return;
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++) {
var anchor = anchors[i];
if (anchor.getAttribute("href") && anchor.getAttribute("rel") ==
"external") anchor.target = "_blank";}
}
window.onload=externalLinks;

<!-- Afficher/Masquer les sous rubriques du menu -->
function montre(id) {
var d = document.getElementById(id);
for (var i = 1; i<; i++) {
if (document.getElementById('smenu'+i))
{document.getElementById('smenu'+i).style.display='none';}
}
if (d) {d.style.display='block';}
}
window.onload=montre;

</script>

</head>

<body>
<div>
<dl id="menu">
<dt onclick="javascript:montre('smenu1');">Accueil</dt>
<dd id="smenu1">
<ul>
<li><a href="page-accueil-1.htm">Accueil</a></li>
<li><a href="page-accueil-2.htm">Bienvenue</a></li>
</ul>
<dt onclick="javascript:montre('smenu2');">Structurer une page</dt>
<dd id="smenu2">
<ul>
<li><a href="page-structure.htm">Structure d&#39;une page</a></li>
<li><a href="page-doctype.htm">Déclarer le DTD</a></li>
<li><a href="page-meta.htm">Les balises meta</a></li>
</ul>
</dd>
</dl>
</div>
<a href="http://www.openweb.eu.org" rel="external">OpenWeb</a>
</html>

Merci


--
MIMATA
-
Astronomie sur PLANETE ASTRONOMIE : http://planete.astronomie.free.fr
XHTML & CSS sur : http://xhtml.css.free.fr
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Azeau
Le #25220
MIMATA wrote:
Bonjour,

Que faut'il changer dans les 2 scripts ci-dessous pour que les 2
fonctions windows.onload fonctionnent ?


Peut etre un truc du genre :
window.onload = function() { externalLinks(); montre(); }

MIMATA
Le #25219
MIMATA wrote:
Bonjour,

Que faut'il changer dans les 2 scripts ci-dessous pour que les 2
fonctions windows.onload fonctionnent ?


Olivier Azeau wrote:
Peut etre un truc du genre :
window.onload = function() { externalLinks(); montre(); }


Super ! C'est exactement ça. Merci beaucoup.


--
MIMATA
----------------------------------------------------------------------------------------------------------------------
Astronomie sur PLANETE ASTRONOMIE : http://planete.astronomie.free.fr
XHTML & CSS sur : http://xhtml.css.free.fr


LEMAIRE Mathieu
Le #25216
Salut c génial ton external_links.. mais y aurait pas moyen
d'automatiser la détection des liens externes ?

Du genre attribbuer target='_blank' aux liens vers des pages != serveur ?

Merci

--
Maz
www.eaurizon.org
Démosthene
Le #25215

Olivier Azeau wrote:
Peut etre un truc du genre :
window.onload = function() { externalLinks(); montre(); }




Bonjour,

Ce n'est pas le cas ici, mais méfiez-vous une prochaine fois : lorsque
vous assemblez plusieurs scripts qui viennent d'horizon différents, les
variables globales peuvent entrer en conflis.

Bonne journée

D.


MIMATA
Le #25213
y aurait pas moyen d'automatiser la détection des liens externes ?


Si. Le problème, c'est que pour que cela fonctionne, il faut mettre tous
les liens en absolut et faire une détection du nom de domaine dans l'url
pour déterminer si le lien doit ouvrir une nouvelle fenêtre ou non.

Le système que j'ai trouvé utilise une case à cocher qui permet au
visiteur de choisir s'il veut ouvrir les liens externes dans une
nouvelle fenêtre ou non. Par ailleurs, il faut cocher cette case à
chaque fois qu'on arrive sur une nouvelle page ce qui est plutôt pas
pratique. Si quelqu'un connait un système avec un cookie pour conserver
le choix du visiteur, ça m'intéresse.

Voici le code :
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Liens externes</title>
<script type="text/javascript">
// JavaScript targeters adapted from holovaty.com
function linksInNewWindow(a) {
var b=a?"xhtml.css.free.fr":"_self";
var c=document.links;
for(var i=0;i<c.length;i++)
{if(c[i].href.search("xhtml.css.free.fr")==-1) c[i].target=b};
var date=new Date();
date.setTime(date.getTime()+(14*24*60*60*1000));
document.cookie=a?"newwin=true;
expires="+date.toGMTString()+";":"newwinúlse;";
}
</script>

</head>

<body>
<input type="checkbox" onclick="linksInNewWindow(this.checked);"
id="linksnewwin" onkeypress="linksInNewWindow(this.checked);" />
<label for="linksnewwin">Cochez cette case pour ouvrir les liens
externes dans une nouvelle fenêtre</label>
<p><a
href="http://planete.astronomie.free.fr">http://planete.astronomie.free.fr</a>
</p>
</body>

</html>

Explication :
- le script est paramétré pour détecter les lien contenant
xhtml.css.free.fr
- j'ai lis 3 liens pour illustrer la fonction, un lien interne en
absolut, un lien externe et un lien interne en relatif. Si vous ne
cochez pas la cace, tous s'ouvrent dans la même fenêtre. Si vous cochez,
le 1er lien s'ouvre dans la même fenêtre, le deuxième ouvre une autre
fenêtre (jusque là, tout est normal) ; en revanche, le lien relatif ne
se comprte pas correctement et ouvre aussi une nouvelle fenêtre alors
que ce n'est pas ce que l'on veut. La solution est donc de mettre tous
les liens en absolut ce qui peut être gênant.


Du genre attribbuer target='_blank' aux liens vers des pages !=serveur
?


Euh...quoi ?! Je comprends pas. Si tu écris target="_blank" dans ton
code, pas besoin de définir que ça ouvre une nouvelle fenêtre puisque
c'est déjà le comportement par défaut de cet attribut (avec cette
valeur). De toute façon, ce truc pour ouvrir des pages dans une nouvelle
fenêtre n'est nécessaire que pour du html strict ou xhtml strict pour
lesquels l'attribut target n'est plus permis. Pour diverses raisons,
ouvrir de nouvelles fenêtres perturbe la navigation de certaines
personnes (notamment mal voyantes), je pense donc qu'il faut laisser le
choix aux visiteurs et leur donner la possibilité d'ouvrir les liens
dans la même fenêtre ou dans une nouvelle. C'est pourquoi, sur mon site
xhtml.css.free.fr, le comportement par défaut des liens est celui
préconisé (c'est-à-dire pas d'ouverture de nouvelles fenêtre) mais j'ai
ajouté, après chaque lien, une petite icone permettant d'ouvrir le lien
dans une nouvelle fenêtre. Le visiteur à le choix et je peux proposer
sans crainte des liens vers d'autres sites sans que cela fasse
disparaitre "mon" visiteur. C'est lui qui choisit.


--
MIMATA
----------------------------------------------------------------------------------------------------------------------
Astronomie sur PLANETE ASTRONOMIE : http://planete.astronomie.free.fr
XHTML & CSS sur : http://xhtml.css.free.fr

MIMATA
Le #25212
Evidemment, 2 erreurs dans le body de mon précédent post : mettre :

<body>
<input type="checkbox" onclick="linksInNewWindow(this.checked);"
id="linksnewwin" onkeypress="linksInNewWindow(this.checked);" />
<label for="linksnewwin">Cochez cette case pour ouvrir les liens
externes dans une nouvelle fenêtre</label>
<p><a
href="http://planete.astronomie.free.fr">http://planete.astronomie.free.fr</a></p>
</body>

--
MIMATA
----------------------------------------------------------------------------------------------------------------------
Astronomie sur PLANETE ASTRONOMIE : http://planete.astronomie.free.fr
XHTML & CSS sur : http://xhtml.css.free.fr
MIMATA
Le #25211
Par ailleurs, il faut cocher cette case à
chaque fois qu'on arrive sur une nouvelle page ce qui est plutôt pas
pratique. Si quelqu'un (Aucune suggestion) un système avec un cookie pour
conserver

le choix du visiteur, ça m'intéresse.


Euh...je sens que j'ai dit une connerie en ce qui concerne le cookie. J'y
connais rien en javascript mais en y regardant de plus près, il semble que
le script cré un cookie qui doit certainement faire ce que je disais.
Oubliez.

MIMATA
----------------------------------------------------------------------------
------------------------------------------
Astronomie sur PLANETE ASTRONOMIE : http://planete.astronomie.free.fr
XHTML & CSS sur : http://xhtml.css.free.fr

LEMAIRE Mathieu
Le #24718
que ce n'est pas ce que l'on veut. La solution est donc de mettre tous
les liens en absolut ce qui peut être gênant.


Effectivement.. c pas possible autrement. A moins de faire intervenir
PHP, du genre :

function check_link(link_string) {
if (file_exists(link_string))
return "href='".link_string."'";
else
return "href='".link_string."' target='_blank'";
}

et mettre partout



Du genre attribbuer target='_blank' aux liens vers des pages !=serveur ?



Euh...quoi ?! Je comprends pas. Si tu écris target="_blank" dans ton
code, pas besoin de définir que ça ouvre une nouvelle fenêtre puisque
c'est déjà le comportement par défaut de cet attribut (avec cette


euh.. non, je voulais dire avec JS

valeur). De toute façon, ce truc pour ouvrir des pages dans une nouvelle
fenêtre n'est nécessaire que pour du html strict ou xhtml strict pour
lesquels l'attribut target n'est plus permis. Pour diverses raisons,
ouvrir de nouvelles fenêtres perturbe la navigation de certaines
personnes (notamment mal voyantes), je pense donc qu'il faut laisser le
choix aux visiteurs et leur donner la possibilité d'ouvrir les liens
dans la même fenêtre ou dans une nouvelle. C'est pourquoi, sur mon site
xhtml.css.free.fr, le comportement par défaut des liens est celui
préconisé (c'est-à-dire pas d'ouverture de nouvelles fenêtre) mais j'ai
ajouté, après chaque lien, une petite icone permettant d'ouvrir le lien
dans une nouvelle fenêtre. Le visiteur à le choix et je peux proposer
sans crainte des liens vers d'autres sites sans que cela fasse
disparaitre "mon" visiteur. C'est lui qui choisit.


Ah d'accord. C'est vrai. Dans ce cas, on utilise ta fonction, pour lui
demander une fois ses préférences..

@+

--
Maz


MIMATA
Le #24717
<p><a
href="http://planete.astronomie.free.fr">http://planete.astronomie.free.fr</a></p>



Bon, c'est bizzare, la création automatique des liens fait qu'ils sont
mal réécris quand je les poste pourtant à la base, le code est bon,
corrigez vous même.

Thibaut Allender
Le #24715
<p><a
href="http://planete.astronomie.free.fr">http://planete.astronomie.free.fr</a></p>


Bon, c'est bizzare, la création automatique des liens fait qu'ils sont
mal réécris quand je les poste pourtant à la base, le code est bon,
corrigez vous même.


avec un vrai newsreader il n'y a aucun problème... balance donc cette
bouse de Outlook (j'ai le droit, on est vendredi...)

--
thibaut allender | freelance | http://capsule.org


Publicité
Poster une réponse
Anonyme