Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Javascript "zufall"

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 18.12.2008, 14:23

Hallo! Ich hoffe jemand von euch hat nen heißen Tipp für mich:

Ich suche ein Javascript das zufällig (oder abwechselnd) beim aufrufen einen von drei bestimmten anderen javascripten anzeigt.

Also beim ersten aufruf wird beispielweise google adsense eingeblendet und beim nächsten mal adsense von einem anderen Anbieter

Ich hoffe ihr wisst was ich in etwa meine

danke schonmal

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

huah
PostRank 6
PostRank 6
Beiträge: 429
Registriert: 19.04.2007, 21:56

Beitrag von huah » 18.12.2008, 15:22

Ich glaube Javascript kann als Zufallsergebnis nur 1 oder 0 ausgeben.

Code: Alles auswählen

Math.round(random()
Für die Erzeugung von drei Zufallsergebnissen, würde mir nur spontan die Verkettung von zwei Math.round(random() einfallen.

Diese Variante würde allerdings zu einer recht ungleichen Verteilung des Zufalls führen.


Mit php wärst Du vielleicht besser beraten....

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 18.12.2008, 16:10

Danke schonmal für die Antwort. In diesem Fall geht tatsächlich nur javascript. Wie würde denn mit deinem Beispiel der gesamte Codeschnipsel aussehen?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


huah
PostRank 6
PostRank 6
Beiträge: 429
Registriert: 19.04.2007, 21:56

Beitrag von huah » 18.12.2008, 16:45

Ist es denn so schwer, mal die Suchmaschine zu befragen, die man tagtäglich zuspammt?

https://www.homepage-total.de/javascrip ... urs011.php

Na, da habe ich wenigstens auch noch was dabei gelernt.

slider
PostRank 4
PostRank 4
Beiträge: 115
Registriert: 11.06.2004, 07:47

Beitrag von slider » 18.12.2008, 17:10

Das was Du möchtest könnte man sehr schön mit einem eigenen Adserver realisieren. Wie z.B. OpenX. Einfach eine Werbefläche definieren und die verschieden Werbemittel (Adsense, Banner oder sonstwas) darin ausliefern. Da kann man dann auch die Häufigkeit steuern.
Zuletzt geändert von slider am 18.12.2008, 17:24, insgesamt 2-mal geändert.

007
PostRank 5
PostRank 5
Beiträge: 332
Registriert: 07.12.2008, 21:52

Beitrag von 007 » 18.12.2008, 17:14

Ist aber ein schlechtes Beispiel.

round() rundet kaufmännisch, was zu einem Ungleichgewicht bei der Verteilung führt. Wenn ich eine Zahl zwischen 1 und 3 haben will, also 3 Optionen, werden Werte ab 1,5 schon auf 2 aufgerundet. D.h., ich habe für die Option 1 einen Wertebereich von 1 - 1,49, für Option 3 nur 2,5 - 3. Option 2 kommt bei einem Wertebereich von 1,5 - 2,49 und somit deutlich häufiger, genauer gesagt etwa genau so häufig wie 1 und 3 zusammen. Als Lösung nimmt man statt round() besser floor(), die Werte werden also abgerundet, dann passt die Verteilung.

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 18.12.2008, 17:35

Ich habe die Suchmaschine schon bemüht, jedoch nicht wirklich was nützliches gefunden. Das mit OpenX wäre in etwa das was ich suche - nur viel zu umfangreich für meine drei Ad Scripte!

Gibt es da nicht ein paar einfache Codezeilen wie

<script type="text/javascript">
var daten = new Array();
daten[1] = "<script type="text/javascript">hier script 1 balbla bla</script>";
daten[2] = "<script type="text/javascript">hier script 2 balbla bla</script>";
daten[3] = "<script type="text/javascript">hier script 3 balbla bla</script>";

function Zufallsausgabe() {
var Zahl = Math.round(Math.random()*9)
if (Zahl > 0 && Zahl < 3) {
alert( daten[Zahl] );
}
else {
Zufallsausgabe(); // Startet die Funktion neu
}
}
</script>


Ich weiß das das Beispiel schwachsinnig ist - aber das meine ich mit codezeilen. Ich füge nur den Code ein und er bestimmt irgendeinen (von mir aus auch nacheinander) code von 1-3

007
PostRank 5
PostRank 5
Beiträge: 332
Registriert: 07.12.2008, 21:52

Beitrag von 007 » 18.12.2008, 18:42

Der "richtige" Weg wäre wohl, die 3 "Ad-Scripte" in 3 Funktionen abzulegen, und per Zufallszahl zu entscheiden, welche Funktion ausgeführt wird.

Code: Alles auswählen

<script type="text/javascript">

function funktion_1&#40;&#41;
&#123;
...
&#125;

function funktion_2&#40;&#41;
&#123;
...
&#125;

function funktion_3&#40;&#41;
&#123;
...
&#125;

option=Math.floor&#40;Math.random&#40;&#41;*3&#41;;

if&#40;option==0&#41;
funktion_1&#40;&#41;;
else if&#40;option==1&#41;
funktion_2&#40;&#41;;
else
funktion_3&#40;&#41;;

</script>

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 18.12.2008, 19:08

ja jetzt haben wir es schon fast! Nur ein kleines roblem - wie binde ich nun z.B. Google Adesens Code richtig ein?



<script type="text/javascript">

function funktion_1()
{
<script type="text/javascript"><!--
google_ad_client = "pub-123456789";
/* Meine Anzeige */
google_ad_slot = "123456789";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="https://pagead2.googlesyndication.com/p ... how_ads.js">
</script>
}

function funktion_2()
{
...
}

function funktion_3()
{
...
}

option=Math.floor(Math.random()*3);

if(option==0)
funktion_1();
else if(option==1)
funktion_2();
else
funktion_3();

</script>

Wenn ich ihn direkt einfüge kann es nicht funktionieren da das abschließende </script> vom google code die funktion vorzeitig beenden würde! Wie müsste ich das umbauen?

Anonymous

Beitrag von Anonymous » 18.12.2008, 19:08

S0l0ng hat geschrieben:Danke schonmal für die Antwort. In diesem Fall geht tatsächlich nur javascript. Wie würde denn mit deinem Beispiel der gesamte Codeschnipsel aussehen?
Auch einen Adserver wie OpenX kann man rein über js einbinden! Ein Vorteil wäre auf jeden Fall, das die spätere Verwaltung der Werbemittel wesentlich komfortabler ist, vor allem wenn es um mehrere Webseiten geht...

Oder auch der Google Admanager würde in Frage kommen, gerade im Bezug auf Adsense bietet er ja noch den Vorteil das du die Anzeigen in einem neuen Fenster öffnen lassen kannst wenn jemand klickt... Der Admanager wird grundsätzlich per js eingebunden...

huah
PostRank 6
PostRank 6
Beiträge: 429
Registriert: 19.04.2007, 21:56

Beitrag von huah » 18.12.2008, 19:38

Ach, ich glaube, so dürfte es S0l0ng erstmal reichen ...

Code: Alles auswählen

<script type="text/javascript">

function funktion_1&#40;&#41;
&#123;
document.write&#40;"<script type=\"text/javascript\">hier script 1 balbla bla<\/script>"&#41;;
&#125;

function funktion_2&#40;&#41;
&#123;
document.write&#40;"1"&#41;;
&#125;

function funktion_3&#40;&#41;
&#123;
document.write&#40;"4"&#41;;
&#125;

option=Math.floor&#40;Math.random&#40;&#41;*3&#41;;
if&#40;option==0&#41;
funktion_1&#40;&#41;;
else if&#40;option==1&#41;
funktion_2&#40;&#41;;
else
funktion_3&#40;&#41;;
</script> 

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 18.12.2008, 19:59

Danke danke! Genau das meinte ich! Mit den anderen Ads funktioniert es auch nur bei Google Adsens gibt es das PRoblem das das Script schon zwischendurch beendet wird - bzw aus zwei teilen besteht:
<script type="text/javascript"><!--
google_ad_client = "pub-123456789";
/* Meine Anzeige */
google_ad_slot = "123456789";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="https://pagead2.googlesyndication.com/p ... how_ads.js">
</script>


weißt du was ich meine?

007
PostRank 5
PostRank 5
Beiträge: 332
Registriert: 07.12.2008, 21:52

Beitrag von 007 » 18.12.2008, 20:02

Du musst das mit document.write() ausgeben, so wie im Beispiel von "huah".

Helfen kann man das aber nicht mehr nennen, was Du machst ist "Arbeiten lassen".

S0l0ng
PostRank 5
PostRank 5
Beiträge: 258
Registriert: 06.11.2008, 08:55

Beitrag von S0l0ng » 18.12.2008, 20:10

Also:

{
document.write("<script type=\"text/javascript\">google code erster teil<\/script>");
}
{
document.write("<script type=\"text/javascript\">google code zweiter teil<\/script>");
}

Und es ist nicht arbeiten lassen sondern so ein Forum ist doch dafür da sich zu helfen wenn einer der Community (=Gemeinschaft) mal nicht weiter weiß - Ich würde es auch so machen wenn jemand eine Frage hat zu Themen bei denen ich mich auskenne (und javascript gehört nunmal leider nicht dazu)

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 19.12.2008, 12:57

huah hat geschrieben:Ich glaube Javascript kann als Zufallsergebnis nur 1 oder 0 ausgeben.
Nein, Math.random() liefert eine Zahl zwischen 0 und 1. Auch Kommazahlen sind Zahlen, und mit denen kann man durchaus auch direkt arbeiten:

Code: Alles auswählen

var i = Math.random&#40;&#41;;
if &#40;i < 0.333&#41; &#123;
    document.write&#40;'<a href="bla">Code 1<' + '/a>'&#41;;
&#125;
else if &#40;i < 0.666&#41; &#123;
    // Code 2
&#125;
else &#123;
    // Code 3
&#125;
Das hat allerdings den Nachteil, dass man bei Hinzukommen oder Wegnehmen einer Option fast alle anderen Optionen bzw. die Grenzwerte dazu anpassen muss.
Kommt beispielsweise eine Option hinzu, müssen 0.333 und 0.666 in 0.25 respektive 0.666 geändert werden. Das ist natürlich zusätzliche Arbeit, weshalb das Multiplizieren und anschließende Abrunden eine sinnvolle Wahl ist.

Wichtig beim Schreiben von HTML-Code mittels document.write ist in jedem Falle, dass schließende Elemente wie das </a> oben aufgebrochen werden in '<' + '/a>'. Die Kombination </ beendet (eigentlich) jeglichen Javascript-Bereich, manche Browser tolerieren die Verwendung, andere jedoch nicht - deshalb in zwei Teilen schreiben.


Als Badewasserzusatz:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http&#58;//www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title></title>

<script type="text/javascript">
/*
Die Werbemaschinerie ist vollständig in der Variablen Werbung gekapselt.
Werbemittel werden erst später definiert, an der Variablen Werbung muss
nichts geändert werden.
*/
var Werbung = &#123;
    dazu&#58; function&#40;objekt, gewicht&#41; &#123;
        this.werbemittel.push&#40;objekt&#41;;
    &#125;,

    werbe&#58; function&#40;&#41; &#123;
        var i = Math.floor&#40;Math.random&#40;&#41; * this.werbemittel.length&#41;;
	    if &#40;typeof this.werbemittel&#91;i&#93; == "string"&#41; &#123;
            document.write&#40;this.werbemittel&#91;i&#93;&#41;;
        &#125;
        else if &#40;typeof this.werbemittel&#91;i&#93; == "function"&#41; &#123;
            this.werbemittel&#91;i&#93;&#40;&#41;;
        &#125;
    &#125;,

    werbemittel&#58; Array&#40;&#41;
&#125;

/*
Im Folgenden werden die Werbemittel definiert.
Bei Text bzw. HTML ist, wie oben schon geschrieben, darauf zu achten, 
dass schließende Elemente aufgebrochen werden. Weiterhin muss der
komplette Code &#40;leider&#41; in einer Zeile stehen.
*/
Werbung.dazu&#40;'Werbung 1<script type="text/javascript">google_ad_client = "pub-1";<' + '/script>'&#41;;
Werbung.dazu&#40;'Werbung 2 sollte hier <a href="">erscheinen<' + '/a>.'&#41;;
Werbung.dazu&#40;function&#40;&#41; &#123; alert&#40;"Hallo Welt"&#41;; &#125;&#41;;

</script>

</head>

<body>
<!-- Hier Werbung! //-->
<script type="text/javascript">Werbung.werbe&#40;&#41;;</script>

</body>

</html>
Der Code demonstriert gleich ein paar Dinge auf einmal:

Die Werbemittel werden in ein Feld (Werbung.werbemittel) geschrieben, anstatt sie direkt auszugeben. Das hat verschiedene Vorteile:
- Die Daten sind vom Code getrennt. Man läuft nicht mehr Gefahr, beim Bearbeiten der Daten versehentlich den Code zu zerlegen.
- Beim Auswürfeln muss nicht mehr die Anzahl der Werbemittel angeben werden. Stattdessen wird auf die Feldlänge .length zurückgegriffen, sie zeigt automatisch an, wie viele Elemente im Feld gespeichert sind. Somit lassen sich Werbemittel hinzufügen, ohne dass auf sonstige Einstellungen geachtet werden muss.
- Beim Ausgeben muss keine endlose if-else-Konstruktion genutzt werden, weil mittels feld[x] direkt auf das Element x des Feldes zugegriffen werden kann. Die Menge an notwendigen document.write()-Aufrufen (und damit potentieller Fehlerquellen) reduziert sich auf genau 1.
- Der HTML-Bereich der Seite bleibt übersichtlicher, denn statt des ganzen Werbegedöns mit Würfelei und if-else-bla erscheint dort nur <script type="text/javascript">Werbung.werbe()</script> - kurz und bündig.

Diese Nutzung eines Feldes statt if-else ist eigentlich das Wichtigste, was ich mit dem Code zeigen wollte. Es kommen aber noch zwei Nebensachen hinzu:

Die Nutzung von Javascript-Objekten. Der gesamte Werbekram ist im Objekt Werbung verkapselt. In diesem Objekt befindet sich das „Werbelager“ (das Feld werbemittel) wie auch die Funktion, die die Werbung ausgibt (werbe()). Verkapselung schafft Platz im Namensraum, alles ist schön geordnet und zusammenhängend an einer Stelle und, sofern der Texteditor das unterstützt, mit einem Klick kann der gesamte Werbecode auf eine Zeile zusammengefaltet werden.

Last but not least lassen sich bei Javascript auch Funktionen in Variablen speichern, denn Funktionen sind Objekte. Mit Werbung.dazu() lässt sich also nicht nur normaler Text bzw. HTML-Code als Werbemittel einfügen, sondern auch eine Funktion, die, so ausgewürfelt, mittels der für den einen oder anderen Programmierer etwas merkwürdig ausehenden Konstruktion werbemittel() aufgerufen wird.
Ob es nun irgendeinen Nutzen hat, dass man auch Funktionen für die Werbung einsetzen kann, weiß ich allerdings nicht :-)

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag