[Erweiterung] Javascript Code in Webseite parsen/grep'n

  • Hallo,

    Ich bin nicht wirklich der Javascript Könner aber ich versuche folgendes:

    Ähnlich wie bei der Erweiterung "Fastdic" die es einen ermöglicht mit Hilfe von z.B. [Strg]+Mausklick nach einem auf einer Webseite angeklicktem Wort in einer Suchmaschine/Dictionary zu suchen möchte ich ähnliches. Nur das es sich dabei nicht um ein Wort sondern einem Bild handelt, bzw den Hintergrundinformationen zu dem Bild.

    Aufbau sieht so aus das in dem "<img ..." tag eine "id=123" steht, mit dieser ID (in dem Fall "123") will ich das in der gleichen Webseite enthaltenen Javascript Array durchsuchen der so aussieht:

    Code
    (...)
    picArray[120]  = [25415  , "94", "100"];
    picArray[121]  = [10254  , "0", "0"];
    picArray[122]  = [45102  , "96", "100"];
    picArray[123]  = [41251  , "0", "0"];
    (...)


    Sprich, die ID 123 ist entsprechend "picArray[123]", und an die darin hinterlegten Informationen moechte ich ran, genauer gesagt an die 5-stellige Zahl ...

    Das auslesen der ID aus dem IMG tag klappt schon einwandfrei, aber ich bekomme es nicht gebacken anhand dieser ID in dem Javascript code oben in der Webseite danach zu suchen. Die Frage ist nun ob dies überhaupt möglich ist, oder wegen eventuellen Sichterheitsbedenken nicht funktioniert oder wenn es doch gehen sollte mir da einer ein Tipp oder ein Beispiel nennen kann.

    Ich danke schon einmal fürs lesen. :)

    so long
    Ava

    PS:
    Durch die Suchfunktion habe ich in einem älteren Beitrag zu einem anderen Thema die Möglichkeit gefunden bestimmte Zeilen in einem Quelltext auszulesen, leider sind die generierten Seiten dafuer nicht zu gebrauchen da der Array unterschiedliche 'Anfangszeilen' hat. :(

  • Tach,

    Es gibt leider keine Beispielseite da diese Seiten nur in einem Firmeneigenen größeren Intranet bestehen und ich leider noch keinen Admin ran bekommen habe um zu fragen ob ich den gesamten Quelltext per copy&paste public machen darf weil da einige Infos drinstehen die denke ich nicht veröffentlicht werden sollen, zumindest bin ich da vorsichtig. :(

    Ist im Grunde eine per PHP generierte Pictures/Gallery Seite das dutzende Fotos als Thumbnails darstellt und mit normalen HTML Header etc. inklusive eben dem Javascriptcode drin. Der Javascriptcode ist dafuer da um zu jedem Bild ein "Tooltip" also ein Feld mit Hintergrundinformationen wie Fotograf, Datum des Bildes, Größe des Bildes etc aus einer Datenbank abzurufen und entsprechend bei einem mouseover darzustellen.

    Das betroffene Javascript sieht im Grunde also sehr schlank aus:


    Eine andere funktion im Javascript ist dann einfach dafuer da anhand des entsprechenden Arrays die noetigen Daten aus der DB zu holen für das jeweilige Bild. Aber das ist ja eigentlich schon wieder ein Schritt der gar nicht interessant sein dürfte, weil ich will ja vorher "nur" an die 5stellige Zahl die im Array liegt für ein bestimmtes Bild, wie gesagt welche ID ich brauche weiß ich, nur wie ich die entsprechende Zeile rausfilter ist mir noch ein Rätsel. :(

    Ava

  • Zitat von boardraider
    Code
    picArray[x][0]


    Hu, nun geht es in den Bereich der mehrdimensionale Arrays, da fühl ich mich gleich wie Captian Kirk, unerfahrene Welten und so. ;)

    Ich konnte es gerade noch nicht ausprobieren, da ich nicht auf der Arbeit bin und dort mein Rechner steht, aber du meinst ich kann bei meiner Erweiterung einfach nach "picArray[123][0]" suchen wenn ich entsprechend den Eintrag zu ID 123 will und dann mir dann meine Zahl per regexp rausfiltern? Das würde ja dann einfach sein. :shock: Oder bin ich da grad auf dem Holzweg, Sry bin da noch absolut unerfahren.

    Ava

  • Code
    picArray[1]  = [84515  , "65", "100"];
    picArray[2]  = [84574  , "0", "0"];
    picArray[3]  = [12541  , "76", "0"];

    Wenn dein Array picArray so definiert ist, dann enthält bspw. der Eintrag picArray[1] wieder ein Array mit den drei Werten 84515, "65" und "100". Auf die Werte greifst du dann zu mit picArray[1][0], picArray[1][1] und picArray[1][2]. Allgemein also picArray[x][y]. Ein weiteres Parsen mit einer RegExp ist nicht nötig, du bekommst direkt den ersten Wert.

  • Zitat von FMAvalon


    Hu, nun geht es in den Bereich der mehrdimensionale Arrays


    Ich will dir ja nicht deine Illusion nehmen... aber:

    Code
    picArray[1]  = [84515  , "65", "100"];


    Das IST bereits ein mehrdimensionales Array.

    Wenn du z.B. auf die 84515 zugreifen willst, dann schreibst du

    Code
    picArray[1][0]


    Wenn Du auf die 65 zugreifen willst:

    Code
    picArray[1][1]

    Um es zu verbildlichen.... das hier:

    Code
    picArray[1]  = [84515  , "65", "100"];


    Ist nichts anderes als das:

    Code
    picArray[1]  = new Array(84515  , "65", "100");


    bzw, ganz ausführlich das:

    Code
    picArray[1]  = new Array();
    picArray[1][0]  = 84515;
    picArray[1][1]  = "65";
    picArray[1][2]  = "100";


    Du hängst also an das Array picArray[1] noch ein Array an, dass 3 eigene Elemente hat.

    Nur um dir deine Angst vor mehrdimensionalen Arrays zu nehmen. Die sind das normalste von der Welt. Muss man sich vorstellen, wie ein Ordner-Baum im Windows-Explorer.

  • Code
    <script>
    var picArray = new Array(4);
    picArray[0]  = ["Bla"  , "Blub"];
    picArray[1]  = [84515  , "65", "100"];
    picArray[2]  = [84574  , "0", "0"];
    picArray[3]  = [12541  , "76", "0"];
    
    
    alert(picArray[1][0] + " " + " " + picArray[0][1]);
    </script>

    Kannst du damit auch lokal bei dir testen.

  • OK OK,

    Danke für das aufklären, hab ich auch verstanden. Damit ist zumindest schon einmal geklaert wie ich im Array an meine Zahl komme, was ja viel wert ist. ;)

    Aber ich glaube wir reden gerade aneinander vorbei. :?

    Mein eigentliches Problem ist ja erstmal das ich noch nicht herausgefunden habe wie ich auf seitens meiner Firefox Erweiterung an das besprochene Array in der Webseite rankomme.

    Also auf der einen Seite ist die Webseite mit dem betroffenen Javascriptteil, und auf der anderen ist mein Browser mit der zukünftigen Erweiterung, und diese soll im Quelltext der Webseite nach dem Array suchen, und genau daran scheitert es aktuell. :(

    Ava

  • Moin,

    Also an den img tag, bzw an die ID komme ich ran über das aufzaehlen der XML dom objects im current windows document. Für den Javascriptteil habe ich das ganze nun einmal versucht per "view-source" zu ziehen, also mit einem kompletten XMLHttpRequest object und das ganze zu parsen zum auffinden des picArray parts ...

    Also wie gesagt bis zum ID Gewinn (getAttribute('id') ;) ist alles OK, die ID hab ich, aber danach das saugen, suchen und extrahieren von picArray per view-source Protokoll will einfach nicht.
    Das ganze ist sehr unsauber, sehr (sehr sehr) langsam und funktioniert eben auch nicht wirklich. Aber das ist aktuell mein Stand der Dinge. Hilfe! Any Ideas? ;)

    Ava

    ANHANG:
    Aktuell ist es eben so das er nach dem Aufruf im Browser genau 20 Sekunden "hängt", mir dann Firefox eine Warnung gibt ("Warnung: Nicht antwortendes Script" - "Ein Script auf dieser Seite ist eventuell beschäftigt oder es antwortet nicht mehr...") und sobald ich auf "Fortsetzen" drücke er mir mein 'nw1' Fenster aufmacht. Ich weiß nicht mehr weiter, es muss doch irgendwie auch ohne diese umständliche und langsame XMLHttpRequest() Geschichte gehen oder etwa nicht, wo ich doch schon an meine ID so schön rankomme?! :(

  • Du kannst von der Erweiterung aus direkt auf die JS-Variablen in der Seite zugreifen.

    http://developer.mozilla.org/en/docs/XPCNat…safe_properties

    Grob gesagt also docWrapper.wrappedJSObject.picArray

    Das wird aber als unsicher angesehen. Solange die Erweiterung natürlich nur auf euren firmeninternen Seiten läuft und diese als "vertrauenswürdig" eingestuft werden können, wäre eine solche Umsetzung möglich.

    Falls du die Coder der php-Seiten mit ins Boot holen kannst, dann:

    http://developer.mozilla.org/en/docs/Code_s…rivileged_pages

    Die Umwege die du da gehst sind unnötig. Alternativ könntest du dir auch die betroffene Script-Node aus dem DOM holen und den Inhalt parsen/grepen. Ist noch immer effizienter als den gesamten Quelltext über view-source zu schieben.