picknikker: Javascript Quellcode-Überwachung. Script soll Quellcode auslesen

Hallo zusammen,

ich suche nach einem einfachen Script, das bei vorhandensein eines bestimmten Keywords m Quellcode (im gesamten Quellcode, nicht nur im HEAD), eine bestimmte Zeichenkette (soll eine Verlinkung zu einem bestimmten Stylesheet sein) ausgibt. Leider konnte ich da bislang nichts zu finden.

Muss man dann eingetlich einen RELOAD der Site auslösen, damit das ggf. neu eingebundene Stylesheet beim Seitenaufbau berücksichtigt wird? Oder kann man das irgendwie umgehen, in dem man bestimmte Passagen des Codes zuerst laden lässt, also damit der "falsche" Seitenaufbau erst gar nicht losgeht?

Danke im Voraus

  1. Hallo,

    ich suche nach einem einfachen Script, das bei vorhandensein eines bestimmten Keywords m Quellcode (im gesamten Quellcode, nicht nur im HEAD)

    Dazu kannst du beispielweise document.documentElement.outerHTML untersuchen. Mit einem <http://de.selfhtml.org/javascript/objekte/regexp.htm@title=Regulären Ausdruck> oder einfach http://de.selfhtml.org/javascript/objekte/string.htm#index_of@title=indexOf.

    eine bestimmte Zeichenkette (soll eine Verlinkung zu einem bestimmten Stylesheet sein) ausgibt.

    »Ausgeben« kann man mit JavaScript nichts, von document.write einmal abgesehen. Dazu verwendest du am besten das DOM. <http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=Erzeuge ein link-Element> mit einem Attribut rel="stylesheet" sowie einem href-Attribut und <http://de.selfhtml.org/javascript/objekte/node.htm#append_child@title=hänge es> in den head ein. Dann wendet der Browser das Stylesheet ganz normal auf das Dokument an.

    Muss man dann eingetlich einen RELOAD der Site auslösen, damit das ggf. neu eingebundene Stylesheet beim Seitenaufbau berücksichtigt wird?

    Nein. Der Reload würde das soeben per JavaScript eingebundene Stylesheet ohnehin zunichte machen, schließlich sieht das Dokument beim Reload wieder genauso aus wie es im Quelltext steht bzw. wie es ursprünglich mit JavaScripten verändert wurde.

    Oder kann man das irgendwie umgehen, in dem man bestimmte Passagen des Codes zuerst laden lässt, also damit der "falsche" Seitenaufbau erst gar nicht losgeht?

    Nein.

    Mathias

    1. Hallo,

      ich suche nach einem einfachen Script, das bei vorhandensein eines bestimmten Keywords m Quellcode (im gesamten Quellcode, nicht nur im HEAD)

      Dazu kannst du beispielweise document.documentElement.outerHTML untersuchen. Mit einem <http://de.selfhtml.org/javascript/objekte/regexp.htm@title=Regulären Ausdruck> oder einfach http://de.selfhtml.org/javascript/objekte/string.htm#index_of@title=indexOf.

      eine bestimmte Zeichenkette (soll eine Verlinkung zu einem bestimmten Stylesheet sein) ausgibt.

      »Ausgeben« kann man mit JavaScript nichts, von document.write einmal abgesehen. Dazu verwendest du am besten das DOM. <http://de.selfhtml.org/javascript/objekte/document.htm#create_element@title=Erzeuge ein link-Element> mit einem Attribut rel="stylesheet" sowie einem href-Attribut und <http://de.selfhtml.org/javascript/objekte/node.htm#append_child@title=hänge es> in den head ein. Dann wendet der Browser das Stylesheet ganz normal auf das Dokument an.

      Muss man dann eingetlich einen RELOAD der Site auslösen, damit das ggf. neu eingebundene Stylesheet beim Seitenaufbau berücksichtigt wird?

      Nein. Der Reload würde das soeben per JavaScript eingebundene Stylesheet ohnehin zunichte machen, schließlich sieht das Dokument beim Reload wieder genauso aus wie es im Quelltext steht bzw. wie es ursprünglich mit JavaScripten verändert wurde.

      Oder kann man das irgendwie umgehen, in dem man bestimmte Passagen des Codes zuerst laden lässt, also damit der "falsche" Seitenaufbau erst gar nicht losgeht?

      Nein.

      Mathias

      Hallo Mathias,

      vielen Dank für die Infos. an "document.write" hatte ich eben auch gedacht Diese Funktion soll aber nur aufgerufen werden, wenn der Quellcode ein bestimmtes Wort enthält.

      Ich bin ansonsten aber absolut unfähig in Sachen JS, leider. PHP kann ich aber bei diesem Projekt nicht anwenden, ich muss alles Client-seitig machen.

      Ich weiß das ist viel verlangt, aber wäre jemand imstande und bereit mir eine konkrete Lösung aufzuzeigen, die genau so funktonieren sollte (mal laienhaft beschrieben):

      "lese quellcode aus
      wenn ausdruck "XXX" vorhanden, erzeuge mit document.write Zeile "YYY", sonst unternehme nichts"

      Das ist eigentlich schon alles. Es soll also nichts ersetzt, oder verglichen werden, oder so. Nur feststellen, ab der Ausdruck da ist, oder nicht und falls JA die bestimmte Zeichenkette ausgeben.

      Vielen Dank im Voraus

      1. Hallo picknikker,

        Ich weiß das ist viel verlangt, aber wäre jemand imstande und bereit mir eine konkrete Lösung aufzuzeigen, die genau so funktonieren sollte (mal laienhaft beschrieben):

        setz mal

        <script type="text/javascript">
          if(document.getElementsByTagName("html")[0].innerHTML.indexOf("stop"+"wort")>-1) alert("gefunden");
        </script>

        ans Ende des Body.

        Das "Stopwort" habe ich in zwei Teile zerlegt, damit es im Script-Teil nicht gefunden wird.

        Gruß, Jürgen

        1. Hallo picknikker,

          Ich weiß das ist viel verlangt, aber wäre jemand imstande und bereit mir eine konkrete Lösung aufzuzeigen, die genau so funktonieren sollte (mal laienhaft beschrieben):

          setz mal

          <script type="text/javascript">
            if(document.getElementsByTagName("html")[0].innerHTML.indexOf("stop"+"wort")>-1) alert("gefunden");
          </script>

          ans Ende des Body.

          Das "Stopwort" habe ich in zwei Teile zerlegt, damit es im Script-Teil nicht gefunden wird.

          Gruß, Jürgen

          Danke, Jürgen. Das Script findet schon mal zuverlässig das Wort, jedoch möchte ich nicht, dass es über einen ALARM ausgegeben wird, sondern einfach an derselben stelle im HTML-Dokument eine Zeile ausgibt (über document.write?), die eine Verlinkung zu einem Stylesheet enthält.

          Der Hintergrund ist der, dass in dem Shop (STRATO), an dem ich gerade baue, dieses bestimmte CSS-Dokument nur aufgerufen werden soll, wenn der Uer sich in der Produktansicht befindet. Ansonsten nicht. Eine anderweitige Einbindung ist schwierig.

          1. Hallo picknikker,

            dann ersetze doch mal das alert durch ein document.write, achte dabei aber auf die Quotierung:

            document.write('<link rel="stylesheet" type="text/css" href="xxx.css">');  // ungetestet!

            Styleangaben sind zwar nur im head-Bereich erlaubt (html5 ?), aber probier es mal aus. Wenn das nicht browserübergreifend funktioniert, musst du createElement und appendChild verwenden.

            Gruß, Jürgen

            1. Hallo picknikker,

              dann ersetze doch mal das alert durch ein document.write, achte dabei aber auf die Quotierung:

              document.write('<link rel="stylesheet" type="text/css" href="xxx.css">');  // ungetestet!

              Styleangaben sind zwar nur im head-Bereich erlaubt (html5 ?), aber probier es mal aus. Wenn das nicht browserübergreifend funktioniert, musst du createElement und appendChild verwenden.

              Gruß, Jürgen

              Hallo Jürgen, Danke noch mal. Ich habe es nun geschafft. War etwas schwierig mit der Maskierung, aber schließlich klappte es:

              <script type="text/javascript">
                if(document.getElementsByTagName("html")[0].innerHTML.indexOf("User"+"Attributes")>-1) document.write("<link type="text/css" href="http://www.team-rpx.de/sebworld/artikeltest.css" rel="stylesheet">");
              </script>

        2. Hallo picknikker,

          Ich weiß das ist viel verlangt, aber wäre jemand imstande und bereit mir eine konkrete Lösung aufzuzeigen, die genau so funktonieren sollte (mal laienhaft beschrieben):

          setz mal

          <script type="text/javascript">
            if(document.getElementsByTagName("html")[0].innerHTML.indexOf("stop"+"wort")>-1) alert("gefunden");
          </script>

          ans Ende des Body.

          Das "Stopwort" habe ich in zwei Teile zerlegt, damit es im Script-Teil nicht gefunden wird.

          Gruß, Jürgen

          Also ich habe das mal so probiert:

          <script type="text/javascript">
            if(document.getElementsByTagName("html")[0].innerHTML.indexOf("User"+"Attributes")>-1) document.write("<link type="text/css" href="/WebRoot/Store8/Shops/63450760/MediaGallery/artikel.css" rel="stylesheet" />");
          </script>

          Es funktioniert aber nicht. Das Stylesheet wird nicht geladen. Geht das möglicheierweise gar nicht so, wie ich mir das ausgedacht habe? Oder habe ich hier nur falsch maskiert?

          Die Seite, um die es sich handelt ist hier:
          http://shop.strato.de/epages/63450760.sf/de_DE/?ObjectPath=/Shops/63450760/Products/%22testartikel%20nikolai%22

          1. Hallo picknikker,

            <script type="text/javascript">
              if(document.getElementsByTagName("html")[0].innerHTML.indexOf("User"+"Attributes")>-1) document.write("<link type="text/css" href="/WebRoot/Store8/Shops/63450760/MediaGallery/artikel.css" rel="stylesheet" />");
            </script>

            der letzte \ muss weg. Den Tipp hat mir die Fehlerkonsole gegeben.

            Gruß, Jürgen

  2. hi,

    mit jquery gibt es die möglichkeit auch nachträglich noch stylesheets global anfügen zu lassen. Da jquery aus js besteht, geht das also. Die genaue Funktion in jquery ist append (wie es im js selber geht weiß ich nicht).

    Wenn du das ganze einschränken möchtest auf Scripte bzw Styles würde ich sagen probier es mit getElementsByName auf Script und Style. Beim durchlauf kannst du dann prüfen wie src gesetzt ist. Bei Links eben auf href. Oder eben auch mit innerHTML wenn es kein Attribut ist.

    Hoffe du kannst dir dadraus die Lösung bauen.

    (Ob das auch für nachträglich eingefügte Codeteile funktioniert, weiß ich nicht genau. Aber danach hast du ja nicht explizit gefragt =P)

    Aber mal doof gefragt, warum manipulierst du das nicht schon bei der Ausgabe?
    suchen und ersetzen geht zuverlässiger in PHP als mit JS (kann deaktiviert sein)

    Gruß Niklas

    --
    Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.