• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[SCRIPTSUCHE] External link disclaimer Dialog

bbnetwork

New member
Ich suche ein Script (auch Jquery) das einen External link disclaimer dialog relisiert.
Alle links meiner Homepage sollen gefiltert werden und wenn es ein externer link ist, soll mittels JS, ohne php, ein Dialog erzeugt werden, der auf den externen link hinweist.
Klickt der besucher dort ok, gehts zur entsprechenden Seite ansonsten bleibt er auf der aktuellen Seite.
 
Es heißt dort, das alle Seiten durch das Script geleitet werden, nicht nur die externen, sondern scheinbar auch die internen. Soll jedoch nur für externe Seiten gelten, außerdem wird dort auf eine PHP umgeleitet, es soll aber ohne PHP arbeiten.

@julian: wo auf der Seite ist denn bitte dein Zitat?
Einzige Antwort dort: "are u sure There is no error"
 
Zuletzt bearbeitet:
Es heißt dort, das alle Seiten durch das Script geleitet werden, nicht nur die externen, sondern scheinbar auch die internen.
Äh ja, aber nur in der Frage. Deshalb wurde doch dort auch die Frage gestellt, weil etwas nicht funktioniert. Und in der Antwort ist dann die korrekte Lösung... :confused: Ich versteh dich grade echt nicht...

Soll jedoch nur für externe Seiten gelten, außerdem wird dort auf eine PHP umgeleitet, es soll aber ohne PHP arbeiten.
Du kannst aber doch selbstverständlich das alles anpassen: anstatt
Code:
 if (href.indexOf("http") === 0   &&   ! ourDomainRegex.test(href) )
    {
      this.href = "/linkoutpage.php?p=" + href;
    }
beispielsweise dann
Code:
if (href.indexOf("http") === 0   &&   ! ourDomainRegex.test(href) )
    {
      this.onclick = "outgoingWarning(" + href + ")";
    }
Das hat doch nichts mit PHP zu tun...
 
Und wo komnt jetzt das "outgoingWarning" her?

Sorry aber bei mir scheint sich im von mikdoe verlinkten thread was anderes angeboten zu werden als bei dir.
Finde dort weder den von dir genannten Code, noch das thanx man.
 
@Julian: onclick darf man keinen String zuweisen, sondern muss eine Funktionsreferenz zuweisen.

Ein funktionierendes Beispiel wäre:
Code:
if (href.indexOf("http") === 0 && !ourDomainRegex.test(href)){
	this.onclick = function(){
		return confirm("Wollen Sie wirklich zu " + this.href + " gehen?");
	};
}
 
Ich weiß überhaupt nicht wie und was.

Was macht das "Regex=/^https ?

Und was passiert in dem Code von Julian bzw. Kkkapser.
Warum 3= vor der 0?
 
Würde dir empfehlen, das Script so einfach wie möglich zu halten, in etwa so:

Code:
$(document).ready(function() 
{
// function is called as soon as document is ready
$("a").filter(function()
{   
//filters all a attributes (<[B]A[/B] href   )
//and looks for all links, if the hostname of the link is same as the hostname of your site                          
return this.hostname && this.hostname !== location.hostname
}).attr('rel','external');
$('[rel="external"]')
.click(function(e)
{
//this function is called if u click a link which is an external link, cuz its hostname is different as urs
e.preventDefault(); //default stops the action (opening the site u try to open)
externalLinkConfirm($(this).attr("href")) //calls another function
})
.each(function()
{
// this function is called for all links, which are internal links
$(this).attr('title',$(this).prop('title')+' (external link)') // default allow the action (opening the site u try to open)
}	
);
}
);

function externalLinkConfirm(url)
{
//creates an variable with your dialog
//you can modify as needed

	var extmsg="YOUR WARNING HERE\n\nClick [OK] to continue to " + url + ".";
	if(confirm(extmsg))location.href=url; // if user click OK, url will be opened.
}
 
Ich weiß schon; hab ich aber anscheinend aus Flüchtigkeit einen Fehler gemacht. Danke für den Hinweis!
Dachte ich mir schon.

Was macht das "Regex=/^https ?
Das definiert einen regulären Ausdruck. RegExp sind ein Kapitel für sich und wenn du dich damit noch nicht auskennst, lohnt es sich auf jeden Fall, dass du dir dazu mal ein Tutorial durchliest.

Warum 3= vor der 0?
=== ist im Vergleich zu == ein strikter Vergleich, der nur Gleichheit ausswagt, wenn auch die Datentypen gleich sind. Da JS bei == manchmal überraschende Ergebnisse erzeugt (so ist es z.B. nicht transitiv) rate ich nur === zu verwenden.

Würde dir empfehlen, das Script so einfach wie möglich zu halten, in etwa so:
Das könnte man sogar noch kürzer machen:

Code:
$(document).ready(function(){
	// function is called as soon as document is ready
	$("a").filter(function(){
		//filters all a attributes (<[B]A[/B] href   )
		//and looks for all links, if the hostname of the link is same as the hostname of your site                          
		return this.hostname && this.hostname !== location.hostname
	})
	.attr('rel','external')
	.click(function(e){
		if (externalLinkConfirm($(this).attr("href"))){
			e.preventDefault();
		}
	})
	.each(function(){
		this.title += ' (external link)');
	});
});

function externalLinkConfirm(url){
	//creates an variable with your dialog
	//you can modify as needed

	var extmsg = "YOUR WARNING HERE\n\nClick [OK] to continue to " + url + ".";
	return confirm(extmsg);
}
- und so wird auch das target-Attribut der <a> beachtet.
 
sogar noch schlimmer
Stimmt nicht ;)
nur bei identität
Das ist aber bei == auch so:
Code:
var a = 2;
var b = new Number(2);
var c = new Number(2);
console.log(a == b);
console.log(a == c);
console.log(b == c);
Ersten beiden ergeben durch den Cast true. Aber beim letzten muss nicht gecastet werden, da beides Objekte sind. Da sie aber nicht identisch sind, kommt false raus.

Bei Primitiven ist die Identität ja auch etwas anders definiert als bei Objekten.
 
nicht schlimmer als == (was ich sowieso meine), sondern schlimmer als typidentität
Ach so... finde ich nicht schlimmer. Identität ist identität und nicht Äquivalenz...
dass == auch auf identität prüft spricht nicht für ==, aber erst recht nicht für ===, da == in 3 von 4 fällen das richtige ergebniss liefert, === nur in 2 von 4
Welche 4 Fälle meinst du? In meinem Code sind nur 3. Aber über die Definition von "richtiges Ergebniss" kann man diskutieren. Ich bin der Meinung, dass === alles richtig macht. Ein Objekt ist einfach kein Primitive und ein String ist einfach nie eine Zahl. Und zwei verschiedene Objekte sind zwei verschiedene Objekte.
Wenn ich einen String als Zahl interpretieren will, kann man das explizit machen. Macht die Programmlogik auch viel verständlicher.

Aber ich weiß schon, dass wir da immer verschiedener Meinung sein werden.
 
Welche 4 Fälle meinst du? In meinem Code sind nur 3.
2==2
2==Number(2)
Number(2)==2
Number(2)Number(2)

Aber über die Definition von "richtiges Ergebniss" kann man diskutieren.
Ich bin der Meinung, dass === alles richtig macht.
in den meisten fällen nicht. i.d.r soll Number(2) == 2 true liefern
selten benötigt man einen "pointervergleich"

Ein Objekt ist einfach kein Primitive und ein String ist einfach nie eine Zahl. Und zwei verschiedene Objekte sind zwei verschiedene Objekte.
dewegen wurden casts erfunden, selbst in typisierten sprachen
und selbst definierbare operatoren an objekten
damit eine integerklasse welche eine 2 repräsentiert auch im vergleich mit einer 2 true liefert
einen operator ==, der die adresse nutzt kenne ich auch sonst nirgendwo, das ist maximal in containerklassen interessant, wo man dann den vergleich expizit vorgeben kann
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben