biber: Funktionsparameter von außen auslesen

Hallo, liebe SELFHTMLianer!

Ich habe folgendes Problem. Mal angenommen alle anchor-Tags im Quellcode einer Seite enthalten nur eine JS dummy-Funktion und der eigentliche Link steht im onclick-Handler des anchors als Parameter einer speziellen Funktion, die dann eben die Zieladresse aufruft.

Schaut also so aus:
<a onclick="clickPic(this, 'http://example.org/example.jpg');" href="javascript:void(0);"> ... </a>

Jetzt ist es natürlich sehr blöd, dass die Verlinkung bei ausgeschaltenem JS nicht funktioniert und dass ich den Link mit einem Mittelclick nicht in einem neuen Tab im Browser aufmachen kann. Deswegen will ich einen Greasemonkey Script schreiben, der diese komischen Links durch normale ersetzt.

Dazu gehe ich mit
for(attr in document.links) {}
durch alle Links in der Seite und will die richtige Ziel-URL aus dem onclick auslesen und dem href-Attribut zuweisen. Das Problem ist nur, document.links[attr].onclick enthält keinen String sondern die Händlerfunktion.

Meine Frage ist nun: ist es irgendwie möglich, die von jeder eizelnen Funktion empfangenen Parameter irgendwie auszulesen? Z.B. bei onclick="clickPic(this, 'http://example.org/example.jpg');" will ich die URL 'http://example.org/example.jpg' auslesen.

Mit freundlichen Grüßen
Der Biber

  1. Hallo biber,

    Jetzt ist es natürlich sehr blöd, dass die Verlinkung bei ausgeschaltenem JS nicht funktioniert

    Das wird sie auch nach Deinem Vorhaben nicht. Wieso machst Du es nicht genau andersherum? Schreibe die Zielurl ins href-Attribut und greife auf dieses mittels JS zu (this.href).

    Für Dein Beispiel: <a onclick="clickPic(this, 'http://example.org/example.jpg');" href="javascript:void(0);"> ... </a>

    fiel mir auf die Schnelle folgendes ein:

      
    window.onload = function(){  
     var arr = document.getElementsByTagName("a");  
     alert(arr[0].onclick.toString().substring(arr[0].onclick.toString().indexOf("http"), arr[0].onclick.toString().length-5));  
    };  
    
    

    Ich denke, nein, ich hoffe man kann es noch schöner machen ;-)

    Mit freundlichem Gruß
    Micha

    --
    LeagueEditor JavaScript kostenlose Ligaverwaltung || richtig Messen will gelernt sein
    1. Hallo, da bin ich wieder!

      Vielen Dank an alle, die mir so schnell geantwortet haben!

      Wieso machst Du es nicht genau andersherum? Schreibe die Zielurl ins href-Attribut und greife auf dieses mittels JS zu (this.href).

      Ihr habt mich alle falsch verstanden glaube ich :D Die Seite ist gar nicht von mir. Wenn sie von mir wäre dann hätte ich ganz sicherlich keine Links drin, die nur bei aktivem JS funktionieren ;) Ich besuche diese Seite ziemlich oft und kann nur noch Schadensbegrenzung betreiben, indem ich die geistigen Ergüsse des Autors durch meine JS Scripts repariere.

      alert(arr[0].onclick.toString().substring(arr[0].onclick.toString().indexOf("http"), arr[0].onclick.toString().length-5));
      };

      Das hat mein Problem gelöst. Ich habe nicht daran gedacht, dass ich toString() auch auf eine Funktion anwenden kann. Vielen Dank, Micha!

      Meine Version schaut in leicht abgewandelter Form nun so aus(alles steckt in einem for ... in):

        
      var cur_onclick = cur_link.getAttribute('onclick');  
      var url = cur_onclick.substring(cur_onclick.indexOf("http"), cur_onclick.length-3);  
      cur_link.setAttribute('href', url);  
      
      

      Muss mit getAttribute()/setAttribute() arbeiten, da Greasemonkey keinen direkten Zugriff auf onclick-Händler unterstützt.

      Mit freundlichen Grüßen
      Der Biber

  2. Schaut also so aus:
    <a onclick="clickPic(this, 'http://example.org/example.jpg');" href="javascript:void(0);"> ... </a>

    Warum nicht einfach:

    <a onclick="clickPic(this, this.href);return false;" href="http://example.org/example.jpg"> ... </a>

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Hallo Struppi.

      Schaut also so aus:
      <a onclick="clickPic(this, 'http://example.org/example.jpg');" href="javascript:void(0);"> ... </a>

      Warum nicht einfach:

      <a onclick="clickPic(this, this.href);return false;" href="http://example.org/example.jpg"> ... </a>

      Vermutlich weil der betreffende HTML-Code nicht vom biber beeinflusst werden kann. Dass hier ein Greasemonkey-Script zum Einsatz kommt, bestätigt diese Annahme meiner Meinung nach.

      Einen schönen Sonntag noch.

      Gruß, Mathias

      --
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
      debian/rules
      1. Hi,

        Vermutlich weil der betreffende HTML-Code nicht vom biber beeinflusst werden kann. Dass hier ein Greasemonkey-Script zum Einsatz kommt,

        Greasemonkey ist ja nun genau dafür da, fremden HTML-Code zu beeinflussen, oder?! =:-)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!