Perl/Javascript: HTML Banner mit auszuführendem Javascript
speedy
- perl
Hallo,
ich habe mir einen kleinen AdServer in Perl programmiert. Jener kann auch HTML-Banner anzeigen. Allerdings wenn in diesem Banner auszuführendes Javascript drin steht (z.B. eines von Google-AdSense), dann funktioniert das alles irgendwie nicht - das Banner wird nicht angezeigt.
Weiß jemand, wie ich solche HTML-Banner "behandeln" muß, damit die dann auch ordentlich angezeigt werden ?
Momentan mache ich es so, daß ich auf der Seite das Script per Javascript-Aufruf/URL aufrufe. Also:
<sript type="text/javascript" src="http://domain.de/zeigebanner.cgi?übergabeparameter"></script>
Im Script setze ich um das Banner noch ein wenig HTML, setze im HTML-Banner vor die Zeichen ' " ; ( ) & . noch einen Backslash und print'e dann per Context-Type: text/javascript folgendes:
print 'document.write('."'". $htmlbanner ."'".');';
Alternativ habe ich auch schonmal versucht nur $htmlbanner auszugeben, was mir den Erfolg brachte, daß ich die viewbanner-URL einzeln im Browser aufgerufen ... jedenfalls dort hat es mit den Javascript-Bannern funktionert, aber eben eingebunden in die Seite nicht. Da kommt nur "Nicht abgeschlossene Zeichenfolgenkonstante" glaub war das. Beim Context-Type text/html oder x-application/javascript zu verwenden hat mich auch nicht weiter gebracht. Ich habe auch mal beim Backslashen andere Zeichen noch mit eingebezogen bzw. quotemeta genommen, aber auch kein besseres Ergebnis - irgendwann hatte ich dann nur auch mal die Fehlermeldung "Syntax Error" im Browser.
Hat jemand eine Idee, was ich noch versuchen kann ?
MFG,
speedy
print 'document.write('."'". $htmlbanner ."'".');';
Alternativ habe ich auch schonmal versucht nur $htmlbanner auszugeben, was mir den Erfolg brachte, daß ich die viewbanner-URL einzeln im Browser aufgerufen ... jedenfalls dort hat es mit den Javascript-Bannern funktionert, aber eben eingebunden in die Seite nicht. Da kommt nur "Nicht abgeschlossene Zeichenfolgenkonstante" glaub war das. Beim Context-Type text/html oder x-application/javascript zu verwenden hat mich auch nicht weiter gebracht. Ich habe auch mal beim Backslashen andere Zeichen noch mit eingebezogen bzw. quotemeta genommen, aber auch kein besseres Ergebnis - irgendwann hatte ich dann nur auch mal die Fehlermeldung "Syntax Error" im Browser.
Hat jemand eine Idee, was ich noch versuchen kann ?
Was für JS-Code steht in $htmlbanner?
Struppi.
Was für JS-Code steht in $htmlbanner?
folgendes wird bei Google generiert:
<script type="text/javascript"><!--
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "000000";
google_color_url = "0000FF";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
Und bei den RelevanceAdd's von eBay (URL ein wenig gekürzt):
<script type="text/javascript">document.write('<scr'+'ipt src="http://domain.de/view.asp?site=lauter_parameter&refurl='+escape(document.location.href)+'"></scr'+'ipt>'); </script>
MFG,
speedy
Hab noch vergessen zu sagen ... um diese HTML-Banner baue ich dann noch ne HTML-Tabelle und bißchen Plain-Text drumrum.
MFG,
speedy
Hab noch vergessen zu sagen ... um diese HTML-Banner baue ich dann noch ne HTML-Tabelle und bißchen Plain-Text drumrum.
Von welchen HTML Banner sprichst du?
Das waren nur ein paar Zeilen JS Code, der wiederrum JS Code einbindet.
Struppi.
Von welchen HTML Banner sprichst du?
Das waren nur ein paar Zeilen JS Code, der wiederrum JS Code einbindet.
Jetzt nimm doch nicht alles so wörtlich. ;) ... Außerdem, wenn ich um den JS Code selber noch HTML drumrum baue, dann habe ich nen HTML Banner. :P ... dann habe ich eben Probleme "JS_mit_HTML_drumrum"-Banner anzuzeigen.
MFG,
speedy
Von welchen HTML Banner sprichst du?
Das waren nur ein paar Zeilen JS Code, der wiederrum JS Code einbindet.Jetzt nimm doch nicht alles so wörtlich. ;) ... Außerdem, wenn ich um den JS Code selber noch HTML drumrum baue, dann habe ich nen HTML Banner. :P ... dann habe ich eben Probleme "JS_mit_HTML_drumrum"-Banner anzuzeigen.
Aha, und das hilft weiter deine Frage zu beantworten?
Ohne den vollständigen relevanten Code kann dir wohl keiner helfen, wenn du nicht weißt wie du ihn zu Verfügung stellst, dann wird das wohl nix.
Struppi.
Was willst du denn noch alles haben ? Die relevanten Sachen hatte ich doch schon alle geschrieben.
Javascript mit ner Tabelle und Text drumrum gebastelt in einer Variablen $output wirst dir doch vorstellen können ?
Dann das suchen/ersetzen:
$output =~ s/'/\'/g;
$output =~ s/"/\"/g;
$output =~ s/;/\;/g;
$output =~ s/(/\(/g;
$output =~ s/)/\)/g;
$output =~ s/./\./g;
$output =~ s/&/\&/g;
Die Ausgabe:
print "Content-type: text/javascript\n\n";
print 'document.write('."'". $output ."'".');';
Und die Einbindung in der Seite:
<script type="text/javascript" src="http://domain.de/verzeichnis/script.cgi?zeigebanner"></script>
Mehr ist da nicht, was ich nicht auch schon im ersten Posting genannt habe oder habe ich was vergessen ?
Das geht ja auch nicht so wirklich um Perl-Unkenntnis, eher um die Technik, wie man solch Banner mit HTML und Javascript drinnen sauber ausgibt, ohne daß Fehler kommen und auch das Javascript ordentlich interpretiert wird - nur passen da irgendwie so ganz viele Kategorien und dann auch wieder keine dazu, so daß ich mich dann mal auf die mitwirkenden - Perl und Javascript - eingeschränkt habe.
MFG,
speedy
Was willst du denn noch alles haben ? Die relevanten Sachen hatte ich doch schon alle geschrieben.
Nein.
Javascript mit ner Tabelle und Text drumrum gebastelt in einer Variablen $output wirst dir doch vorstellen können ?
Genau darum geht's doch, was steht in $output?
Dann das suchen/ersetzen:
$output =~ s/'/\'/g;
$output =~ s/"/\"/g;
$output =~ s/;/\;/g;
$output =~ s/(/\(/g;
$output =~ s/)/\)/g;
$output =~ s/./\./g;
$output =~ s/&/\&/g;
Wozu?
alternativ:
$output = quotemeta($output);
Wieso willst du die Ausgabe unbedingt Quoten?
Dazu besteht kein Anlaß. Zumindest nicht wenn in $output ganz normaler JS Code steht.
Die Ausgabe:
print "Content-type: text/javascript\n\n";
print 'document.write('."'". $output ."'".');';
Hier schon wieder, lass dir mal irgendwie Ausgeben was für ein Müll vermutlich im Browser ankommt.
Mehr ist da nicht, was ich nicht auch schon im ersten Posting genannt habe oder habe ich was vergessen ?
Ja, was in der Variabel steht, dass hatte ich schon in meinem ersten Posting gefragt...
Struppi.
Genau darum geht's doch, was steht in $output?
Ja sags doch gleich ;)
So baue ichs zusammen:
$output .= '<table cellspacing=0 cellpadding=0 border=0>';
$output .= '<tr><td align=center valign=middle>';
$output .= $html;
$output .= '</td></tr>';
$output .= '</table>';
Wozu?
Weil ich z.B. bei meinem document.write am Anfang und ende ein ' habe und das dann nicht mit den ' vom Javascript in $html klar kommt - der Browser findet dann das richtige Ende vom document.write nicht. Genauso habe ich da Klammern und Semikolon's etc.
Wieso willst du die Ausgabe unbedingt Quoten?
Dazu besteht kein Anlaß. Zumindest nicht wenn in $output ganz normaler JS Code steht.
Sie oben - das wollte ich in dem Fall, wo ich folgendes zur Ausgabe nehme:
print 'document.write('."'". $output ."'".');';
Sonst findet der Browser nicht das Ende von diesem document.write, falls vorher im anderen JS-Code auch endende Klamern sind bzw. die einfachen Hochkommata.
Hier nochmal das, was der Browser dann bekommt - das mittlere Zeug ist jenes eBay-Relevance JS aus dem anderen Posting:
document.write('<table cellspacing=0 cellpadding=0 border=0><tr><td align=center valign=middle>
<script type="text/javascript">document.write('<scr'+'ipt src="http://domain.de/view.asp?parameter_gekuerzt&refurl='+escape(document.location.href)+'"></scr'+'ipt>'); </script>
</td></tr></table>');
MFG,
speedy
So baue ichs zusammen:
$output .= '<table cellspacing=0 cellpadding=0 border=0>';
$output .= '<tr><td align=center valign=middle>';hier kommt das Google- bzw. eBay-Zeugs aus dem anderen Posting direkt aus der DB rein.
$output .= $html;
$output .= '</td></tr>';
$output .= '</table>';
Das ist soweit ok, wobei es aber kein gültiges HTML ist.
Wozu?
Weil ich z.B. bei meinem document.write am Anfang und ende ein ' habe und das dann nicht mit den ' vom Javascript in $html klar kommt - der Browser findet dann das richtige Ende vom document.write nicht. Genauso habe ich da Klammern und Semikolon's etc.
Blödsinn.
Wieso willst du die Ausgabe unbedingt Quoten?
Dazu besteht kein Anlaß. Zumindest nicht wenn in $output ganz normaler JS Code steht.Sie oben - das wollte ich in dem Fall, wo ich folgendes zur Ausgabe nehme:
print 'document.write('."'". $output ."'".');';
Sonst findet der Browser nicht das Ende von diesem document.write, falls vorher im anderen JS-Code auch endende Klamern sind bzw. die einfachen Hochkommata.
Das einzige was du Quoten musst, sind Hochkommas innerhalb Hochkommas oder doppelte Anführungszeichen innerhalb doppelter Anführungszeichen.
Hier nochmal das, was der Browser dann bekommt - das mittlere Zeug ist jenes eBay-Relevance JS aus dem anderen Posting:
document.write('<table cellspacing=0 cellpadding=0 border=0><tr><td align=center valign=middle>
<script type="text/javascript">document.write('<scr'+'ipt src="http://domain.de/view.asp?parameter_gekuerzt&refurl='+escape(document.location.href)+'"></scr'+'ipt>'); </script>
</td></tr></table>');
Das muss in diesem Falle in einer Zeile stehen, sobal da ein Zeilenumbruch drin ist, wirst du einen JS Fehler bekommen.
Letztlich geht das wesentlich einfacher, wenn du die here Doc Syntax verwendest
Wobei ich mich auch Frage, warum du nicht einfach einen Skript Tag verwendest statt document.write
so in etwa müßte es gehen:
my $html = <<HTML;
<script type="text/javascript">
var html = '<table cellspacing=0 cellpadding=0 border=0><tr><td align="center" valign="middle">'
print $html;
Struppi.
Das ist soweit ok, wobei es aber kein gültiges HTML ist.
Wie, Wo, Was ? Sprichst du jetzt einfach nur davon, daß ich die Anführungsstriche nicht gesetzt habe oder fehlen mir da irgendwelche anderen Kenntnisse ?
Das einzige was du Quoten musst, sind Hochkommas innerhalb Hochkommas oder doppelte Anführungszeichen innerhalb doppelter Anführungszeichen.
Klammern muß ich auch quoten - zumindestens sah ich mich dazu veranlaßt, als ohne jenem Klammern-Quoten eine Fehlermeldung in die Richtung kam. Ok, das Semikolon etc. habe ich nur mehr aus Sicherheit auch noch gequotet.
Das muss in diesem Falle in einer Zeile stehen, sobal da ein Zeilenumbruch drin ist, wirst du einen JS Fehler bekommen.
Die Zeilenumbrüche wurden vom Browser eingefügt (nagel mich bitte gerade nicht fest, ob von dem, wo ich das rauskoiert habe oder von diesem Textarea hier im Forum) Wie du an dem geposteten Code sehen kannst, füge ich nirgendwo einen Zeilenumbruch ein. Aber es wäre vielleicht noch eine Idee aus dem Code, der aus der DB kommt, die ganzen \n etc. rauszuschmeißen.
wenn du die here Doc Syntax verwendest
Die was Syntax ? - sorry, aber das sagt mir gerade überhaupt nichts. Hast du mal nen Link ?
Wobei ich mich auch Frage, warum du nicht einfach einen Skript Tag verwendest statt document.write
so in etwa müßte es gehen:
Werd ich doch glatt gleich mal ausprobieren - in der nächsten Arbeitspause :) ... aber - kann man Script-Tags verschachteln ? Da zum Beispiel beim Google-AdSense Code sind ja wiederum zwei solcher Tags drin - das stört sich dann nicht untereinander mit meinen ?
var html = '<table cellspacing=0 cellpadding=0 border=0><tr><td align="center" valign="middle">'
- '<script src="http://domain.de/view.asp?parameter_gekuerzt&refurl='
- escape(document.location.href)
- '"></script>
document.write(html);
</script>
</td></tr></table>
Was ich gerade nur noch nicht ganz verstehe - den Anfang der Tabelle fügst du mit in der Variablen html ein, aber das Ende der Tabelle nicht ? - war das jetzt nur ein Schreibfehler bzw. weil das egal ist oder wirklich so gewollt ?
MFG,
speedy
Das ist soweit ok, wobei es aber kein gültiges HTML ist.
Wie, Wo, Was ? Sprichst du jetzt einfach nur davon, daß ich die Anführungsstriche nicht gesetzt habe oder fehlen mir da irgendwelche anderen Kenntnisse ?
Attributewerte, die keine Zahlen sind müssen in Anführungszeichen stehen.
Das einzige was du Quoten musst, sind Hochkommas innerhalb Hochkommas oder doppelte Anführungszeichen innerhalb doppelter Anführungszeichen.
Klammern muß ich auch quoten - zumindestens sah ich mich dazu veranlaßt, als ohne jenem Klammern-Quoten eine Fehlermeldung in die Richtung kam. Ok, das Semikolon etc. habe ich nur mehr aus Sicherheit auch noch gequotet.
Nein, Klammern musst bzw. darfst du nicht quoten.
Das muss in diesem Falle in einer Zeile stehen, sobal da ein Zeilenumbruch drin ist, wirst du einen JS Fehler bekommen.
Die Zeilenumbrüche wurden vom Browser eingefügt (nagel mich bitte gerade nicht fest, ob von dem, wo ich das rauskoiert habe oder von diesem Textarea hier im Forum) Wie du an dem geposteten Code sehen kannst, füge ich nirgendwo einen Zeilenumbruch ein. Aber es wäre vielleicht noch eine Idee aus dem Code, der aus der DB kommt, die ganzen \n etc. rauszuschmeißen.
Wenn du den Text mit \n ausgibst, wird der JS Interpreter Fehlermeldungen auspucken, ja.
wenn du die here Doc Syntax verwendest
Die was Syntax ? - sorry, aber das sagt mir gerade überhaupt nichts. Hast du mal nen Link ?
Wie gesagt, bei deiner Perl installation ist eine sehr ausführliche Dokumentation dabei.
Werd ich doch glatt gleich mal ausprobieren - in der nächsten Arbeitspause :) ... aber - kann man Script-Tags verschachteln ? Da zum Beispiel beim Google-AdSense Code sind ja wiederum zwei solcher Tags drin - das stört sich dann nicht untereinander mit meinen ?
Ja, da erst dein JS Code ausgeben wird und dann der aus den externen JS, d.h. das was in dem externen Code mit document.write() ausgegeben wird steht nicht in der Tabelle.
Was ich gerade nur noch nicht ganz verstehe - den Anfang der Tabelle fügst du mit in der Variablen html ein, aber das Ende der Tabelle nicht ? - war das jetzt nur ein Schreibfehler bzw. weil das egal ist oder wirklich so gewollt ?
Schreibfehler.
Struppi.
Hi,
ich habe mal spaßhalber erstmal nur die Zeilenumbrüche etc. per $html =~ s/\n|\r|\t|\f//g aus dem externen Code entfernt ... und siehe da, der eBay Code ließ sich ohne weitere Änderungen am Script (also folgendes wird auch immernoch gequoted: ' " ( ) & . ; und per document.write rausgeschrieben) und ohne Fehler anzeigen. Google ließ sich dadurch noch nicht überreden - das werde ich dann morgen in Ruhe testen mit den anderen vorgeschlagenen Änderungen.
MFG,
speedy
folgendes wird bei Google generiert:
<script type="text/javascript"><!--
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text";
google_ad_channel ="";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "000000";
google_color_url = "0000FF";
google_color_text = "000000";
//--></script>
Hier wird sicher keine Fehler erzeugt.
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
und was ist damit?
Und bei den RelevanceAdd's von eBay (URL ein wenig gekürzt):
<script type="text/javascript">document.write('<scr'+'ipt src="http://domain.de/view.asp?site=lauter_parameter&refurl='+escape(document.location.href)+'"></scr'+'ipt>'); </script>
Jetzt wissen wir genauso viel wie vorher oder vermutest du das in diesen Zeilen ein Fehler ist?
Stimm ich seh'S grad, es gibt kein document.location.href location ist ein Unterobjekt von window.
Struppi.
hi,
Jener kann auch HTML-Banner anzeigen. Allerdings wenn in diesem Banner auszuführendes Javascript drin steht (z.B. eines von Google-AdSense), dann funktioniert das alles irgendwie nicht
"Funktioniert irgendwie nicht" ist immer noch keine Problembeschreibung.
http://forum.de.selfhtml.org/hilfe/charta.htm#tipps-fuer-fragende
gruß,
wahsaga
"Funktioniert irgendwie nicht" ist immer noch keine Problembeschreibung.
http://forum.de.selfhtml.org/hilfe/charta.htm#tipps-fuer-fragende
Ist mir schon klar - das war auch erstmal eine Art Zusammenfassung ... weiter unten habe ich ja geschrieben, was ich schon ausprobiert habe und mit welchem Erfolg. Wenn ich wüßte, was da dran nicht funktioniert bzw. wo der Fehler liegt - dann würde ich nicht fragen.
Aber falls du noch weitere Infos benötigst - soweit ich die rausbekommen kann, kann ich die dir gerne sagen, falls du mir sagen kannst, was du noch an Infos benötigst.
MFG,
speedy