eigene erweiterung - onclick ohne funktion

  • hallo forum, ich habe ein problem.

    mit folgendem code duchsuche ich den quellcode aktuell aufgerufenen seite um einen bestimmen button zu finden. den button finde ich auch ohne probleme. diesen button moechte ich nun noch mit einem onclick-ereignis belegen um eine funktion auszufuehren wenn selbiger angeklickt wird. leider funktioniert das nicht und ich weis nicht wieso. der button wird bunt umrandet, daher funktioniert die zeile vor dem "onclick" noch, jedoch wenn man den button klickt wird die angegebene funktion nicht aufgerufen und der alert funktioniert nicht.

    hat jmd eine idee warum oder wie ich das problem beheben kann ?

  • Code
    Fehler: uncaught exception: [Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: chrome://mailc/content/overlay.js :: mc_init :: line 15"  data: no]

    kommt bei der zeile

    Code
    input[i].onclick = mc_count;
  • Wenn das so funktionieren würde: gute Nacht Sicherheit.

    mc_count() gehört zur Anwendung, onclick zur angezeigten Seite.
    Dem Script auf der Seite ist die Funktion mc_count() also völlig unbekannt.

    Eine Möglichkeit:
    addEventListener("meinereignis", mc_count, bool, true) und bei
    onclick ein Event dispatchen.
    Der 4. Parameter in addEventListener sagt aus, dass auch "untrusted"
    events verabeitet werden sollen.

    Eine andere:
    Dem input[i] ein Attribut oder Wert ("mailCWasHere" oder ähnlich)
    verpassen, um dieses im Event-Handler abzufragen.

  • Zitat von 4711

    Wenn das so funktionieren würde

    Tut es.

    Zitat

    gute Nacht Sicherheit.

    Erklärung bitte.

    Was ist daran unsicher? Das Event wird in der Seite ausgelöst. Die Funktion ist in chrome fest definiert. Wie soll diese von der Seite aus mit JS umgebogen werden?

    Zitat

    Dem Script auf der Seite ist die Funktion mc_count() also völlig unbekannt.

    Ja, wenn dies so wäre, dann hätte man eine Sicherheitslücke.

  • Zitat von boardraider

    ...Erklärung bitte.

    Wenn jemand eine Frage mit Code-Beispiel stellt, dann beziehe ich
    mich immer auf den Code und auf nichts andere.

    Und im entsprechenden Code heißt es "input[i].onclick"
    und läuft nunmal im Scope der Seite.
    (wobei meine zweite "Lösung" schon deutlich in Richtung eines Handlers
    im "Chrome" geht...)

    Dein "button.addEventListener()" läuft im Scope vom Chrome.
    Oder hab ich da jetzt etwas grundsätzlich missverstanden?

    Und dass man die Sache auf verschiedene Arten lösen kann, ist klar.
    Ich bin davon ausgegangen, dass "tag.onclick" von sich aus informieren soll.

    Du kannst auch ganz einfach einen globalen Listener einbauen, welcher
    anschließend das geklickte Element analysiert, um zu entscheiden was
    passieren soll.

    Wenn man mit "tag.onclick" (nicht "addEventListener" aus dem Chrome)
    über die Content/Chrome Barriere kommen könnte, dann wäre das
    ein Sicherheitsloch und zwar ein riesengroßes.

    Mit "tag.onclick" wird ja im nicht unbedingt ein Listener hinzugefügt,
    sondern evtl. auch ersetzt. Und das nur im Scope der Seite.

    Dass eine Erweiterung die Finger von z.B. "tag.onclick" lassen sollte ist
    auch klar, denn damit ist es gar zu einfach, die Funktionalität einer Seite
    zu zerstören.

    Einmal editiert, zuletzt von Anonymous (29. Juni 2007 um 13:09)

  • Zitat von 4711

    Wenn jemand eine Frage mit Code-Beispiel stellt, dann beziehe ich
    mich immer auf den Code und auf nichts anderes.

    Vor deinem Edit lass sich das noch anders ;)

    Zitat

    Und im entsprechenden Code heißt es "input[i].onclick"
    und läuft nunmal im Scope der Seite.

    Selbst button.onClick funktioniert. Das wundert mich etwas wegen
    http://developer.mozilla.org/en/docs/XPCNat…PCNativeWrapper

    Zitat

    Assigning to or reading an on* property on an XPCNativeWrapper of a DOM node or Window object will throw an exception. (Use addEventListener instead, and use "event.preventDefault();" in your handler if you used "return false;" before.)

    Deswegen hatte ich addEventListener vorgeschlagen. Was versteh ich dann an der Stelle falsch?

    Zitat

    Wenn man mit "tag.onclick" (nicht "addEventListener" aus dem Chrome)
    über die Content/Chrome Barriere kommen könnte, dann wäre das
    ein Sicherheitsloch und zwar ein riesengroßes.

    Deswegen gibt es ja eigentlich XPCNativeWrapper.

  • Zitat von boardraider

    Vor deinem Edit lass sich das noch anders ;)


    Darum hab ich es ja auch editiert. ;)

  • Zitat von boardraider

    Selbst button.onClick funktioniert. Das wundert mich etwas wegen
    http://developer.mozilla.org/en/docs/XPCNat…PCNativeWrapper


    Solange "tag.onclick = chromeFunction" - gesetzt im Scope der Seite - nicht
    funktioniert, ist doch alles in Ordnung... ;) Oder funktioniert das auch?

    Zitat von boardraider

    Deswegen hatte ich addEventListener vorgeschlagen. Was versteh ich dann an der Stelle falsch?


    Nichts. Du liest und beantwortest Fragen nur anders als ich.
    Ich hab nur erklärt, warum es nicht funktionieren kann und darf, um
    anschließend eine funktionstüchtige Lösung möglichst nahe am
    vorhandenen Code zu geben.

  • Zitat von 4711

    Solange "tag.onclick = chromeFunction" - gesetzt im Scope der Seite - nicht
    funktioniert, ist doch alles in Ordnung.

    Jap, das wäre doof.

    Zitat

    Nichts. Du liest und beantwortest Fragen nur anders als ich.

    Ich bezog mich nur auf den zitierten Text. Denn nach meiner Interpretation dürfte onClick = chromefunc gar nicht gehen. Tut es aber. Also verstehe ich das wohl falsch :?:

  • Zitat von boardraider

    ...Ich bezog mich nur auf den zitierten Text. Denn nach meiner Interpretation dürfte onClick = chromefunc gar nicht gehen...

    Reden wir jetzt über "xxx.wrappedJSObject"?

    Tut mir leid: Ich hab von all dem hier erwähnten Code NICHTS auspropiert.

    Einmal editiert, zuletzt von Anonymous (29. Juni 2007 um 13:55)

  • hui, hier hab ich ja was losgetreten :)

    ich hab aber noch eine frage wenn ich euch schon einmal alle beisammen habe, es hat mit der urspruenglichen frage aber nichts mehr zu tun, jedoch will ich auch nicht unbedingt nen neue thema aufmachen.

    und zwar frage ich mit folgendem code ab welche url in einem bestimmten frage geladen wurde ...

    Code
    var moep = w.frames[1].frames[1].location;
    alert(moep);
    /*ausgabe: http://255.255.255.255/foo/email/bar/index.php?var=hoho */

    jedoch wird folgender code dann nicht mehr ausgefuehrt bzw bricht ab und nachfolgender code wird nicht ausgefuehrt. allerdings versteht ich nicht warum.

    Code
    if(moep.match(/email/))
    alert('richtiger frame');
    else
    alert('falscher frame');

    es stehen keine fehler in der fehlerkonsole.
    faellt euch dazu noch was ein?

  • Also ich rede davon:
    http://developer.mozilla.org/en/docs/XPCNat…PCNativeWrapper

    Wenn ich in meinem Chrome-Code auf Dom-Nodes zugreife (bspw. den Button aus dem Beispiel), dann sind diese von einem XPCNativeWrapper umschlossen. Nach meiner Lesart des Punktes 1. an der im Dokument verlinkten Stelle dürfte dann onClick = nicht funktionieren. Aber das tut es bei mir. Das blicke ich gerade nicht. Eigentlich sollte es eine Exception geben. Ich sehe aber keine in der Fehlerkonsole und die Funktion wird aufgerufen.