Firefox 2.0.0.2 Probleme nach appendChild
benedik.s
- javascript
Servus,
ich füge über folgende Zeilen ein neues Javascript auf meiner Seite ein:
/* Create new script element */
var java_script = document.createElement('script');
java_script.language = "JavaScript";
java_script.type = "text/javascript";
java_script.text = service.lib;
/* Add script element to DOM */
document.getElementsByTagName('head')[0].appendChild(java_script);
service.lib enthält dabei den script code
bisher konnte ich nun immer über - windowservice.service_name + "initService"; - initService-Funktion des angefügten Skript aufrufen.
Seit dem letzen FF-Update weigert sich dieser allerding die Funktion aufzurufen. Im IE funktioniert es nach wie vor.
Auch den Funktionsnamen zusammen zu setzen und dann direkt aufzurufen:
z.B.
var function_name = service.service_name + "initService";
function_name();
funktioniert leider nicht.
FF meckert nun immer, dass die Funktion nicht vorhanden ist:
"window[service.service_name + "__initService"] is not a function"
Wenn ich über DOM-Inspector das Script-Element ansehe ist die Funktion da. Das Anfügen hat demnach funktioniert.
---
Any ideas?
Gruß,
Benedikt
Hallo benedik.s,
java_script.text = service.lib;
bist Du Dir hier sicher? Ich nehme immer src=...
Gruß, Jürgen
Hallo benedik.s,
java_script.text = service.lib;
bist Du Dir hier sicher? Ich nehme immer src=...
Gruß, Jürgen
Ja, src verwendest du wenn du einen Dateipfad hinterlegst.
Die service.lib Variable enthält aber schon direkt den Text der Funktionen.
Gruß,
Benedikt
Hallo benedikt.s,
Ja, src verwendest du wenn du einen Dateipfad hinterlegst.
Die service.lib Variable enthält aber schon direkt den Text der Funktionen.
ups, das ".lib" habe ich für eine (unkonventionelle) Extension gehalten.
Gruß, Jürgen
/* Create new script element */
var java_script = document.createElement('script');
java_script.language = "JavaScript";
java_script.type = "text/javascript";
java_script.text = service.lib;
/* Add script element to DOM */
document.getElementsByTagName('head')[0].appendChild(java_script);service.lib enthält dabei den script-code
Mal abgesehen davon, dass ich das etwas ungewöhnlich finde (ich würde setAttribute() und createTextNode() benutzen) und mit so einer Konstruktion (einbinden von Code durch Einhängen eines <script>-Elements) eh meist Ärger hatte: Steckt hinter service.lib eine externe Datei oder eine Variable, die den Code enthält? In letzterem Fall kannst Du den ganzen Aufwasch da oben auch einfacher haben:
var Funktion = new Function(service.lib);
Aufruf dann ganz einfach mit
Funktion();
Hallo Zabraham.
/* Create new script element */
var java_script = document.createElement('script');
java_script.language = "JavaScript";
java_script.type = "text/javascript";
java_script.text = service.lib;
/* Add script element to DOM */
document.getElementsByTagName('head')[0].appendChild(java_script);service.lib enthält dabei den script-code
Mal abgesehen davon, dass ich das etwas ungewöhnlich finde (ich würde setAttribute() […] benutzen)
… und am IE scheitern.
Einen schönen Dienstag noch.
Gruß, Mathias
/* Create new script element */
var java_script = document.createElement('script');
java_script.language = "JavaScript";
java_script.type = "text/javascript";
java_script.text = service.lib;
/* Add script element to DOM */
document.getElementsByTagName('head')[0].appendChild(java_script);service.lib enthält dabei den script-code
Mal abgesehen davon, dass ich das etwas ungewöhnlich finde (ich würde setAttribute() […] benutzen)
… und am IE scheitern.
Weil?
Hallo Zabraham.
/* Create new script element */
var java_script = document.createElement('script');
java_script.language = "JavaScript";
java_script.type = "text/javascript";
java_script.text = service.lib;
/* Add script element to DOM */
[…]Mal abgesehen davon, dass ich das etwas ungewöhnlich finde (ich würde setAttribute() […] benutzen)
… und am IE scheitern.
Weil?
Sagte ich bereits: IE.
Einen schönen Dienstag noch.
Gruß, Mathias
Mal abgesehen davon, dass ich das etwas ungewöhnlich finde (ich würde setAttribute() und createTextNode() benutzen) und mit so einer Konstruktion (einbinden von Code durch Einhängen eines <script>-Elements) eh meist Ärger hatte: Steckt hinter service.lib eine externe Datei oder eine Variable, die den Code enthält? In letzterem Fall kannst Du den ganzen Aufwasch da oben auch einfacher haben:
setAttribute() macht wohl bei manchen IE Versionen Probleme. Auf diesem Weg hat es bisher mit allen Browsern funktioniert die ich getestet habe.
var Funktion = new Function(service.lib);
Aufruf dann ganz einfach mit
Funktion();
ja, service.lib ist eine Variable die den Code enthält. Allerdings können dort beliebig viele Funktionen drin stecken. Funktioniert das dann auch noch mit dem new Function() ??
Gruß,
Benedikt
Hallo benedik.s.
ich füge über folgende Zeilen ein neues Javascript auf meiner Seite ein:
/* Create new script element */
var java_script = document.createElement('script');
java_script.language = "JavaScript";
java_script.type = "text/javascript";
java_script.text = service.lib;
/* Add script element to DOM */
document.getElementsByTagName('head')[0].appendChild(java_script);service.lib enthält dabei den script code
bisher konnte ich nun immer über - windowservice.service_name + "initService"; - initService-Funktion des angefügten Skript aufrufen.
Seit dem letzen FF-Update weigert sich dieser allerding die Funktion aufzurufen. Im IE funktioniert es nach wie vor.
Offenbar ist die JS-Engine des Firefox gehörig langsamer geworden. Ich kann dein Problem nachvollziehen aber eine Kontrolle der Anzahl der script-Elemente z. B. per DOM-Inspektor zeigt, dass das neue Element eingefügt wurde. Ruft man hiernach eine darin spezifierte Funktion manuell auf, wird sie problemlos ausgeführt.
Dir bleibt also augenscheinlich nichts Anderes übrig, als die Funktionen erst dann auszuführen, wenn Firefox sie registriert hat. Dies kannst du in einem Interval so lange überprüfen, bis das der Fall ist.
Einen schönen Donnerstag noch.
Gruß, Mathias
Hallo nochmal.
Seit dem letzen FF-Update weigert sich dieser allerding die Funktion aufzurufen. Im IE funktioniert es nach wie vor.
Offenbar ist die JS-Engine des Firefox gehörig langsamer geworden.
… was auch nicht unbekannt ist. Mit der aktuellen Version 2.0.0.3 vom Firefox wurde dieser Fehler behoben. (Soeben überprüft.)
Einen schönen Donnerstag noch.
Gruß, Mathias
Seit dem letzen FF-Update weigert sich dieser allerding die Funktion aufzurufen. Im IE funktioniert es nach wie vor.
»»
FF meckert nun immer, dass die Funktion nicht vorhanden ist:
"window[service.service_name + "__initService"] is not a function"
Sehr interessant - die FF-Entwickler haben ihren Fehler wohl selbst bemerkt. Seit Gestern (Update auf FF 2.0.0.3) funktioniert die Sache wieder.
Wers testen will - hier:
http://www.schwinkendorf.info/diplarbeit/student_job/client.html
Grüße,
Benedikt