Hallo,
Oder eine globale Variable setzen, in der gespeichert wird, ob gerade ein externer Link geklickt wurde.
Das sähe dann etwa so aus:
<script>
[code lang=javascript]function onbeforeunload () {
if (window.externerLink) {
window.externerLink = false;
return "Wirklich verlassen?";
}
};
function handleClick (e) {
e = e || window.event;
var target = e.target || e.srcElement;
if (target.nodeName.toLowerCase() == "a" && target.href.match(/^http:\/\/nichtshop/)) {
window.externerLink = true;
} else {
window.externerLink = false;
}
}
function onload () {
document.body.onclick = handleClick;
}
</script>
<p>
<a href="./shop">shop</a>
<a href="http://nichtshop.example.org">nicht shop</a>
</p>[/code]
Alle click-Ereignisse werden zentral beim body-Element überwacht. Durch das Event-Bubbling kommen alle click-Ereignisse dort vorbei und können behandelt werden. Es wird abgefragt, bei welchem Element das Ereignis passiert ist (Event-Target), ob es sich um einen Link handelt und ob es sich um einen externen Link handelt. Diese Prüfung mit einem regulären Ausdruck ist hier nur angedeutet, das müsste man an die örtlichen Gegebenheiten anpassen (der reguläre Ausdruck bedeutet: Link-URI beginnt mit der Zeichenkette »http://nichtshop«). Wenn es sich um einen externen Link handelt, wird eine globale Variable gesetzt. Die wird im anschließend gefeuerten beforeunload-Handler abgefragt. Nur wenn vorher also ein externer Link geklickt wurde, wird ein Meldungsfenster ausgegeben.
Jetzt nur zur Verdeutlichung des Konzeptes.
Mathias