Firefox - getElementById() - Object wird als Function zurückgegeben
Hallo,
ich ändere in Javascript das 'data'-Attribute eines objects:
In Chrome und Internet Explorer wird die aktualisierte Seite korrekt geladen. Im Firefox (36.0) wird die Seite nicht geladen. Das Objekt bleibt einfach leer (weiß).
Hier die Ausgabe aus der Konsole:
Also wird das 'object' mit der entsprechenden ID als Funktion eingelesen. Mit Chrome und Internet Explorer wird das 'object' korrekt als 'object' eingelesen.
Weiss jemand warum es im Firefox als 'function' eingelesen wird?
ich ändere in Javascript das 'data'-Attribute eines objects:
function SetObjectUrl(object_id, url){
var my_object = document.getElementById(object_id);
if(typeof my_object === "object"){
my_object.setAttribute("data", url);
console.log("Update für '" + object_id + "', URL = " + url);
}
else{
console.log("Falscher Typ von 'my_object': " + typeof my_object);
}
}
In Chrome und Internet Explorer wird die aktualisierte Seite korrekt geladen. Im Firefox (36.0) wird die Seite nicht geladen. Das Objekt bleibt einfach leer (weiß).
Hier die Ausgabe aus der Konsole:
Falscher Typ von 'my_object': function
Also wird das 'object' mit der entsprechenden ID als Funktion eingelesen. Mit Chrome und Internet Explorer wird das 'object' korrekt als 'object' eingelesen.
Weiss jemand warum es im Firefox als 'function' eingelesen wird?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 264651
Url: https://administrator.de/forum/firefox-getelementbyid-object-wird-als-function-zurueckgegeben-264651.html
Ausgedruckt am: 21.04.2025 um 15:04 Uhr
22 Kommentare
Neuester Kommentar
Hallo mabue,
wie sieht das Objekt aus das du im DOM auswählst (welcher Tagtyp im DOM). Kann das Verhalten hier in Firefox testweise nicht nachvollziehen.
Deine Abfrage ist aber eher unzuverlässig. Ich würde eher so prüfen:
Der Grund: Es wird auch ein (null)Objekt zurückgegeben wenn die ID nicht gefunden wurde. Kannst du überprüfen mit
Grüße Uwe
wie sieht das Objekt aus das du im DOM auswählst (welcher Tagtyp im DOM). Kann das Verhalten hier in Firefox testweise nicht nachvollziehen.
Deine Abfrage ist aber eher unzuverlässig. Ich würde eher so prüfen:
if (my_object != null) {
//.....
}else{
//....
}
console.log(typeof null)
Grüße Uwe
Zitat von @mabue88:
In der HTML gibt es mehrere Objects, aber alle haben definitiv unterschiedliche IDs.
Ahh du willst bestimmt den Tagname des Nodes prüfen oder ? Das machst du mit der Eigenschaft nodeName und nicht mit typeofIn der HTML gibt es mehrere Objects, aber alle haben definitiv unterschiedliche IDs.
document.getElementById(object_id).nodeName
Kannst du aber auch mit
var objects = document.getElementsByTagName('object');
for(i=0;i<objects.length;i++){
objects[i].setAttribute("data","http://domain.de");
}
Ja das ist OK bis auf den "case sense" von OBJECT, das kannst du z.B. mit match machen:
oder mit toLowerCase()... habe nämlich schon erlebt das die Eigenschaft nicht überall den Tag in Großbuchstaben zurückgegeben hat (komischerweise).
if(my_object != null && my_object.nodeName.match(/^object$/i)){
// Load new URL
}
Ich würde das neue Element vorher einfügen (insertBefore), dann hast du noch seine Position im DOM und dann das alte Element löschen.
Zitat von @mabue88:
Ist es möglich, von der Seite, in welcher das Object (über das wir reden) enthalten ist, auf eine Javascript-Funktion
der im Object geladenen Seite zuzugreifen?
Ja, das geht. Hol dir eine Referenz zum Object, darin gibt es dann die Eigenschaft contentWindow von der aus du alle deine JavaScript-Funktionen aus der Subsite aufrufen kannst.Ist es möglich, von der Seite, in welcher das Object (über das wir reden) enthalten ist, auf eine Javascript-Funktion
der im Object geladenen Seite zuzugreifen?
document.getElementById('myObject').contentWindow.deineFunctionImObject();
Zitat von @mabue88:
Da hab ich die "falsche Version" geposted. Dachte auch an einen Schreibfehler und habe verschiedene Schreibweisen von
'contentWindow' getestet. Alle, inkl. 'contentWindow' geben ein 'undefined' zurück...
Geht hier einwandfrei ... bitte nicht die IE-Krücke benutzen ...Da hab ich die "falsche Version" geposted. Dachte auch an einen Schreibfehler und habe verschiedene Schreibweisen von
'contentWindow' getestet. Alle, inkl. 'contentWindow' geben ein 'undefined' zurück...
Im IE musst du es anders machen....
document.getElementById('my_object').contentDocument.parentWindow.deineFunctionImObject();
Du kannst auch mal auf das Laden des Contents im Object warten und daran ein Event binden:
Das geht hier ebenfalls problemlos ...
<html>
<head>
</head>
<body>
<object id="my_object" data="load.html"></object>
<script type="text/javascript">
document.getElementById('my_object').onload = function (){
this.contentWindow.load_func();
};
</script>
</body>
</html>
Siehe dazu auch http://stackoverflow.com/questions/1600488/calling-javascript-function- ...
Hier ist zwar von einem iFrame die Rede, das spielt aber keine Rolle, ist das selbe ...
Hier ist zwar von einem iFrame die Rede, das spielt aber keine Rolle, ist das selbe ...