JavaScript per gm javascript einfügen

striker159

Lt. Junior Grade
Registriert
Dez. 2008
Beiträge
328
hallo
auf einer website gibt es folgendes objekt:
onmouseover="return overlib('langercode <a href=blub>XXX</a>',variablen);"

<a href=blub>XXX</a> möchte ich ersetzen durch:
<a href="#" onclick="javascript:meinefunktion(){...}">xxx2</a>

meinfunktion beinhaltet mehrere anführungszeichen.

wenn ich dann versuche es einzufügen mittels innerhtml.replace, bekomme eine fehlermeldung von wegen nicht beendetem string.
eigentlich verständlich,da die " aus meiner funktion wahrscheinlich das " vor return schließt.

Fehler: missing variable name
Quelldatei:
Zeile: 1, Spalte: 13
Quelltext:
javascript:var

dann hab ich mich im internet schlau gemacht. es gibt diese funktionen encodeURI(component).
damit habe ich dann das, was ich einfügen will in url form gebracht.

dann meckert er allerdings, dass bei encodeURIComponent() das : nach dem javascript nicht mehr da ist;

Fehler: missing ; before statement
Quelldatei:
Zeile: 1, Spalte: 11
Quelltext:
javascript%3Avar%20x%3D1%3Balert(x)%3B

bei encodeURI() kann ff nichts mit var%20variablenname anfangen -.-

Fehler: missing variable name
Quelldatei:
Zeile: 1, Spalte: 14
Quelltext:
javascript:var%20x=1;alert(x);


kann mir jemand helfen?
 
Zuletzt bearbeitet:
das habe ich schon versucht, klappt aber nicht. hier nochmal das problem verdeutlicht

innerhtml von dem element ist
onmouseover="return overlib('langercode <a href=blub>XXX</a>',variablen);"
...
Code:
var alt = '<a href=blub>XXX</a>'
var s = "x.requestFile=\\\'index.php?ajax=1&session="+session+"\\\'";
neu = '<a href=# onclick=\\\'javascript:function a(){alert(this.response);}var x=new sack();x.runResponse = a;x.execute = true;'+s+';ajax.setVar(\\\'session\\\',' +session+');x.setVar(\\\'order\\\', 6);x.setVar(\\\'reply\\\', \\\'short\\\');x.runAJAX();\\\'>muh<\/a>'; 

x.innerhtml=x.innerhtml.replace(alt,neu);

danach steht in innerhtml folgendes:
Code:
onmouseover="return overlib('langercode <a href="#" onclick="javascript:function a(){alert(this.response);}var x=new sack();x.runResponse = a;x.execute = true;x.requestFile=" index.php?ajax="1&amp;session=998477f70034';ajax.setVar('session',998477f70034);x.setVar('order'," 6);x.setvar(="" reply="" ,="" short="" );x.runajax();="">muh</a>',variablen);"

irgendwas verwechselt der da und macht aus \\\' ein " , sodass "index.php?ajax=" nicht teil des strings ist,was dann einen fehler auslöst.
und später macht er aus \\\' ein =""
 
Hm, okay, liegt das jetzt am Forum oder an deinem Code, dass da 3 Backslashes sind? Versuch doch mal, für HTML-Attribute konsistent die doppelten und für Javascript-Strings konsequent die einfachen Anführungszeichen zu benutzen. Escape die mit einem Backslash und schau dir den generierten Code an.

Darüber hinaus: So ein langes Ding gehört in eine eigene Funktion und nicht in ein HTML-Attribut. Eventuell solltest du das auslagern und in den Event-Auslöser nur den Funktionsaufruf reinsetzen.
 
ja es sind drei backslashes und es funktioniert auch so. daraus wird dann letztendlich im htmltext \' ( \\=\ , \'=' )

ein backslash reicht nicht. dann sind die anführungszeichen zwar im string maskiert, aber nicht im quelltext.

zu deinem rat: meinst du das so?
Code:
function blub(){
...
}
neu = '<a href=# onclick=blub()>blub</a>
?
das problem dabei ist dann, dass zwar im onclick-ereignis blub() steht, blub allerdings nur im gm-script definiert ist, nicht aber im quelltext
Ergänzung ()

warum kompliziert, wenn es auch einfach geht:rolleyes:

hab jetzt einfach folgendes gemacht^^
Code:
var x = document.createElement('a');
var text = document.createTextNode('blub');
x.appendChild(text);
x.href="#";
x.setAttribute('onclick', 'javascript:...');
b.appendChild(x);
:D
kann zu. trotzdem danke Stefan -
 
Zurück
Oben