SCRIPT SRC immer Javascript?

Ronald Nickel

Legendäres Mitglied
Hallo Ayomisten

Eigendlich habe ich nur 2 leidige themen. Javascript und SQL. Heute ist wieder mal JS mein Problem

Ich möchte das Resultat einer CFML seite (*.cfm) in eine andere Seite die HTML oder auch PHP sein kann inkludieren.
Google Adnsense realisiert es mit "<script SRC="......" Nur wird da aber immer ein Javascript aufgerufen. Ich würde aber gerne das sichbare Resultat einer Coldfusionseite inkludieren. Ich habe schon IFrame in Erwägung gezogen komme aber zum Schluß das es da sicher noch komfortablere Möglichkeiten gibt.

Muss es immer ein Javascript (.js) sein welches mit "SCRIPT SRC" aufgerufen wird?

Gruß Ronny
 
Du kannst auch das Ergebnis deiner Coldfusion-Seite per Java-Script anzeigen. Hierfür generierst du mit Coldfusion einfach die Seite und das nötige JavaScript. So macht es Google ja auch, Serverseitig generieren und per JavaScript anzeigen lassen.

Also so meine ich das:

PSEUDOCODE:
CODE
<?PHP
header( "text/javascript" ); // JavaScript als Header festlegen
dieser();
code();
generiert();
$output = output(); //in $output wird das resultat der ausgabe gespeichert
$escapedOutput = escape( $output ); // $output muss unbedingt escaped werden.
echo "document.write('$escapedOutput')";
?>



PS: Wenn du diesen Ansatz wählst, achte darauf, dass du sämtliches Client-Seitiges Caching mit Headern unterbindest. Einige Browser wollen das "JavaScript" unbedingt cachen, ...

Also so ungefähr:

QUOTE
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
  header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
  header("Cache-Control: private, post-check=0, pre-check=0", false);
  header("Pragma: no-cache"); // HTTP/1.0



Und dann kannst du auch die Coldfusion-Site includen:

CODE
<script type="text/javascript" src="/myContent.cfm"/>

 
Hallo Joel.
Vielen dank für den Ansatz. Also rein zum Verständnis meinerseits:
Hier mein JS script (content.cfm)
----------------------------------------------------------------
<cfset var1="6">
<cfset var2="44">

<script language="Javascript">
<!--
var j_count1=<cfoutput>#var1#</cfoutput>;
var j_count2=<cfoutput>#var2#</cfoutput>;
</script>
----------------------------------------------------------------
Und hier die aufrufende Datei (aufrufer.cfm)
<script type="text/javascript" src="/content.cfm"/>
----------------------------------------------------------------
Wie erwartet funktioniert es natürlich nicht. MUSS das content-script im header von content.cfm gebaut werden? Muss dieses script nicht irgendwie durch eine variable adressierbar machen welches durch den aufrufer angesprochen wird?

Un dum nicht weiter fragen zu müsssen: Ich muss über javascript (script src) ein mit einem Image versehenen Link aufrufen

<a href="MeineSeite.cfm?#variable1#"><img src="meinpfad/#variable2#"border="0"></a>

Müsste das extere javascriopt etwa so aussehen?
--------------------------------------------------------------------
<cfset var1="6">
<cfset var2="44">

<script language="Javascript">
<!--
writline='=<a href="MeineSeite.cfm?#vari1#"><img src="meinpfad/#var2#"border="0"></a>';
</script>
--------------------------------------------------------------------



Gruß Ronny
 
QUOTE (Ronald Nickel @ Mo 19.3.2007, 16:13)Hier mein JS script (content.cfm)
----------------------------------------------------------------
<cfset var1="6">
<cfset var2="44">

<script language="Javascript">
<!--
var j_count1=<cfoutput>#var1#</cfoutput>;
var j_count2=<cfoutput>#var2#</cfoutput>;
</script>
----------------------------------------------------------------


So müßte es auf jeden Fall falsch sein. Unter dem Link http:// deinedomain.de/content.cfm müßte etwas erreichbar sein, das vom Output her bsp. wie dieses JavaScript aussieht. Also reines JavaScript ohne die Html-Spitzklammern drumherum.

Lass mal <script> und </script> weg.

Sprich: Alles CF-spezifische müßte beim Aufruf durch CF so ersetzt werden, daß eben nur noch JavaScript pur rauskommt.

Edit: Mache mal eine CF-Seite, die nur


QUOTE alert("Hallo")


ausgibt, binde die ein und teste, ob das korrekt ausgegeben wird.
 
Ich verstehe leider die Coldfusion-Sprache nicht.

Jedenfalls kann ich es nochmals anders formulieren.

1. In einem Coldfusion-Script namens "test.cfm" generierst du den Inhalt (HTML) und speicherst ihn in der Variable $foo. (Den gesamten Inhalt, Diesen Inhalt gibst du aber nicht aus).
2. Im gleichen "test.cfm" musst du die Variable $foo korrekt escapen.
3. Du sendest NUR "document.write( '$foo' );" an den Browser (auch im test.cfm). Nichts anderes. Aber eine Zeile bevor du das machst, musst du noch das Caching und den Content-Type richtig setzen (wie oben beschrieben).
4. Serverseitig kannst du das JavaScript mit "<script type="text/javascript" src="/test.cfm"/> includen. Somit wird der generierte HTML inhalt von /test.cfm an der plazierten Stelle angezeigt.
 
Na mal sehen:
hier mal die content.cfm
----------------------------------------------------------------------------
<!--cachen verhindern ---->
<cfheader name="Expires" value="0">
<cfheader name="Pragma" value="no-cache">
<cfheader name="Cache-control" value="no-cache, no-store, must-revalidate">

<!-- CFML-Code in Variable "foo" speichern ------->
<cfsavecontent variable="foo">
<cfset var1="4711">
<cfset var2="meinBuld.jpg">
<cfoutput>
<a href="MeineSeite.cfm?id=#var1#"><img src="meinpfad/#var2#"border="0"></a>
</cfoutput>
</cfsavecontent>

<!---- in Javascipt ausgeben ---->
<document.write( '$foo' );" >
---------------------------------------------------------------------------
Und hier die aufrufene Seite
----------------------------------------------------------------------------
<script type="text/javascript" src="/content.cfm"/>
document.write( '$foo' );"
</script>
------------------------------------------------------------------
Klar kommen die Comments später wieder weg. Aber noch immer wir nichts angezeigt

Gruß Ronny
 
Mir scheint, daß da zu viel vermischt bzw. nicht aufgelöst ist.

Ich kenne zwar CF nicht. Aber auf die Schnelle würde ich mal folgendes ausprobieren (alles andere erst einmal weglassen):

Datei http:// deinedomain.de/content.cfm

QUOTE <cfoutput>
document.write("Hallo")
</cfoutput>


Poste da mal einen Link zu so einer Datei. Das müßte auch von mir her korrekt abrufbar sein.

Dann Einbindung (im Prinzip auf jeder beliebigen Seite, die die Adresse kennt):


QUOTE <script type='text/javascript' src='/content.cfm'></script>


Sprich: Problemeingrenzung, erst einmal minimal versuchen.
 
Hallo Jürgen
<cfoutput> wird für die Ausgabe dynamischer Inhalte wie Variablen oder Datenbankqueries benötigt.

Die von die beschrieben Datei liegt unter htp:www.ronnic-arts.de/content.cfm

Inhalt:
<cfoutput>
document.write("Hallo")
</cfoutput>



Gruß Ronny
 
Na das funktioniert doch tadellos:

http://www.sql-und-xml.de/temp/ronnic-arts.html

Ersetze das 'Hallo' durch etwas anderes, rufe die obige Seite erneut auf - das schlägt sofort durch.

Man sieht auch ein kurzes Zögern beim Scriptaufruf.

Edit: Jetzt muß das JavaScript korrekt sein:
QUOTE document.write("<a href='MeineSeite.cfm?id=#var1#'><img src='meinpfad/#var2#' border='0'></a>")


Sprich: Wenn außen ", dann innen ' für die Attribute. Außerdem wird #var1# nicht aufgelöst.
 
Hallo Joel und Jürgen
vielen Dank für eure Unterstützung

Und so hat dann geklappt:

<cfset foo="4711">
<cfoutput>
document.write("<a href='http://www.ronnic-arts.de/?id=#foo#'>Mein Link</a>")
</cfoutput>


und die aufrufene Datei:

<script type='text/javascript' src='http://www.ronnic-arts.de/content.cfm'></script>

Nur noch eine letzte Frage: Welche der beiden Datein darf nicht gecached werden?

Vielen Dak nochmals

Gruß Ronny
 
QUOTE
Nur noch eine letzte Frage: Welche der beiden Datein darf nicht gecached werden?


Die CFM-Datei darf nicht gecached werden! Dort musst du die entsprechenden Headers ausgeben.


CODE
document.write("<a href='http://www.ronnic-arts.de/?id=#foo#'>Mein Link</a>")


Die "-Anführungszeichen sind im HTML-Source zu verwenden. Müssen aber nach JavaScript-Standard escaped werden.

Ich glaube so:

CODE
document.write("<a href=\"http://www.ronnic-arts.de/?id=#foo#\">Mein Link</a>");


Also " durch \" ersetzen *oder* ' durch \' ersetzen wenn du einfache Anführungszeichen beim Aufruf der Funktion verwendest.
 
QUOTE (Joel @ Mo 19.3.2007, 18:20)Also " durch \" ersetzen *oder* ' durch \' ersetzen wenn du einfache Anführungszeichen beim Aufruf der Funktion verwendest.

Man kann immer das Zeichen, das nicht die Zeichenkette markiert, innerhalb dieser unmaskiert verwenden.

Sprich:


QUOTE document.write("<a href='ziel.html'>Info</a>")


ist korrekt. Man kann auch solche Konstrukte nutzen:


QUOTE document.write("<a href=" + String.fromCharCode(34) + "ziel.html" + String.fromCharCode(34) + ">Info</a>")


Solche Konstrukte braucht man, wenn man mit Xsl dynamisch Html generiert und der Html-Code JavaScript-Aufrufe von externen Funktionen einschließen soll. Da ist dann eine Ebene der Anführungszeichen durch Xsl schon verbraucht, weil der ganze obere Ausdruck selbst durch einfache Hochkommata eingeschlossen wird (PS: Das ist ein dummes Beispiel, weil man das auch durch eine Auslagerung lösen könnte. Aber es gibt den Fall der Parameterübergabe an eine ausgelagerte Funktion).
 
Mit
<cfsavecontent variable="foo">
<html><body><table> ......
</cfsavecontent>


kann man in ColdFusion eine komplette Seitei in eine Variable speichern

Leider ist die wohl nicht so einfach mit writeline auszugeben.

Tja man kann nicht alles haben
Auf jeden Fall haben wir heute wieder viel gelernt

Gruß Ronny
 
Zurück
Oben