Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Firefox - getElementById() - Object wird als Function zurückgegeben

Mitglied: mabue88

mabue88 (Level 2) - Jetzt verbinden

26.02.2015, aktualisiert 04.03.2015, 895 Aufrufe, 22 Kommentare

Hallo,

ich ändere in Javascript das 'data'-Attribute eines objects:

01.
function SetObjectUrl(object_id, url){ 
02.
	var my_object = document.getElementById(object_id); 
03.
 
04.
	if(typeof my_object === "object"){ 
05.
		my_object.setAttribute("data", url); 
06.
		console.log("Update für '" + object_id + "', URL = " + url); 
07.
08.
	else{ 
09.
		console.log("Falscher Typ von 'my_object': " + typeof my_object); 
10.
11.
}
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:

01.
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?
Mitglied: eisbein
26.02.2015 um 17:50 Uhr
Hallo!

Nur mal zur Anregung. Wenn schon Javascript verwendet wird, warum dann nicht gleich JQuery oder dergleichen?

Gruß
Eisbein
Bitte warten ..
Mitglied: colinardo
26.02.2015, aktualisiert um 18:11 Uhr
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:
01.
if (my_object != null) { 
02.
    //..... 
03.
}else{ 
04.
    //.... 
05.
}
Der Grund: Es wird auch ein (null)Objekt zurückgegeben wenn die ID nicht gefunden wurde. Kannst du überprüfen mit console.log(typeof null)

Grüße Uwe
Bitte warten ..
Mitglied: mabue88
26.02.2015 um 19:15 Uhr
Bislang habe ich noch nicht mit JQuery gearbeitet. Wollte mal damit anfangen, aber ergab sich bisher noch nicht.
Vielleicht setzt mich mal dran.

@colinardo:
Mit der unzuverlässigen Abfrage gebe ich dir recht. Das ändere ich ab. Allerdings löst das mein Problem noch nicht.

Hier eine der Object-Zeilen im HTML-Dokument:
01.
<object id="my_id" class="my_class" type="text/html" data="default_page.php"></object>
Die hier definierte "default_page.php" soll eben dynamisch ersetzt werden.
In der HTML gibt es mehrere Objects, aber alle haben definitiv unterschiedliche IDs.

Getestet habe ich mit Firefox auf zwei unterschiedlichen Rechnern. Bei beiden der gleiche Sachverhalt.
Bitte warten ..
Mitglied: colinardo
26.02.2015, aktualisiert um 19:26 Uhr
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 typeof
document.getElementById(object_id).nodeName
Kannst du aber auch mit
01.
var objects = document.getElementsByTagName('object'); 
02.
for(i=0;i<objects.length;i++){ 
03.
  objects[i].setAttribute("data","http://domain.de"); 
04.
}
über alle Object-Nodes iterieren ...
Bitte warten ..
Mitglied: mabue88
26.02.2015, aktualisiert um 19:35 Uhr
Die Abfrage ist nur dafür da, um sicherzustellen, dass auch wirklich ein Objekt mit der entsprechenden ID gefunden wurde.
Wenn das nicht der Fall ist, brauche ich der 'data'-Eigenschaft auch keine neue URL zuweisen.

Sprich: eigentlich nur Fehlervermeidung


Wenn ich jetzt beide Vorschläge von dir zu dem hier kombiniere...
01.
if(my_object != null && my_object.nodeName == "OBJECT"){ 
02.
    // Load new URL 
03.
}
dann sollte das für die Fehlervermeidung ausreichen, oder?

Habs gerade mal versucht, damit funktioniert es im Firefox...
Bitte warten ..
Mitglied: colinardo
26.02.2015, aktualisiert um 19:36 Uhr
Ja das ist OK bis auf den "case sense" von OBJECT, das kannst du z.B. mit match machen:
01.
if(my_object != null && my_object.nodeName.match(/^object$/i)){ 
02.
    // Load new URL 
03.
}
oder mit toLowerCase()... habe nämlich schon erlebt das die Eigenschaft nicht überall den Tag in Großbuchstaben zurückgegeben hat (komischerweise).
Bitte warten ..
Mitglied: mabue88
26.02.2015 um 19:36 Uhr
Ja, "case sense" wird noch "entfernt".

Mit dieser Lösung ist es gerade auch schon vorgekommen, dass die neue URL der 'data'-Eigenschaft zugeweisen wurde, das Object aber die Seite nicht geladen hat!
Das Problem liegt also noch irgendwo anders...
Bitte warten ..
Mitglied: colinardo
LÖSUNG 26.02.2015, aktualisiert 04.03.2015
Das Problem liegt also noch irgendwo anders...
Dazu kenne ich zu wenig von deiner Seite ... vermutlich musst du die Objects erst aus dem DOM entfernen und neu hinzufügen, damit sie Ihre Daten neu laden (gerade zu faul zu testen ;-P).
Bitte warten ..
Mitglied: mabue88
26.02.2015 um 19:57 Uhr
Kann ich das wie folgt machen?

- Bestehendes Object mittels ID in Variable schreiben
- Dieses Object im DOM löschen
- Das Object in der Variable anpassen ('data' ändern)
- Das Object in der Variable wieder in das DOM einfügen
Bitte warten ..
Mitglied: colinardo
26.02.2015, aktualisiert 27.02.2015

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.
Bitte warten ..
Mitglied: mabue88
03.03.2015 um 10:34 Uhr
Hallo,

ich habe gerade noch etwas festgestellt.

Im Body der Informationsseite habe ich ein onclick-Event definiert: onclick="window.frameElement.click()"
Dadurch wird beim Anklicken der Seite das Click-Event an das (eventuell) darüber liegende Object weitergeleitet und dessen onclick-Event ausgelöst.

Nachdem ich die URL wie beschrieben aktualisiere, funktioniert das mit dem Event nicht mehr. Das Object, in welchem die Informationsseite geladen ist, empfängt das Event nicht mehr.

Ich vermute, dass ich um die von colinardo genannte Methode nicht herum komme...
Bitte warten ..
Mitglied: mabue88
03.03.2015 um 18:02 Uhr
Ich hatte gerade noch eine andere Idee, um eine Aktualisierung des Objects im eigentlichen Sinn zu umgehen.

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?

Dann könnte ich die Aktualisierung nämlich durch einen entsprechenden Funktionsaufruf mit Parametern durchführen...
Bitte warten ..
Mitglied: colinardo
03.03.2015, aktualisiert um 18:21 Uhr
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.
document.getElementById('myObject').contentWindow.deineFunctionImObject();
Grüße Uwe
Bitte warten ..
Mitglied: mabue88
03.03.2015 um 18:34 Uhr
"document.getElementById('myObject').contentWindow" liefert mir ein 'undefined' zurück.

Hauptseite:
01.
<html> 
02.
	<head> 
03.
		<script type="text/javascript"> 
04.
			function CallChildFunction(){ 
05.
				console.log(document.getElementById("my_object").contentWindow); 
06.
				document.getElementById("my_object").contentwindow.load_func(); 
07.
08.
		</script> 
09.
	</head> 
10.
	<body> 
11.
		<object id="my_object" data="load.html"></object> 
12.
		<input type="button" value="Klick" onclick="CallChildFunction()"> 
13.
	</body> 
14.
</html>
Seite im Object:
01.
<html> 
02.
	<head> 
03.
		<script type="text/javascript"> 
04.
			function load_func(){ 
05.
				alert("load_func"); 
06.
07.
		</script> 
08.
	</head> 
09.
	<body> 
10.
		Page to Load 
11.
	</body> 
12.
</html>
Bitte warten ..
Mitglied: colinardo
03.03.2015, aktualisiert um 18:49 Uhr
contentwindow
Du hast einen Schreibfehler... es muss contentWindow heißen.
Bitte warten ..
Mitglied: mabue88
03.03.2015 um 18:56 Uhr
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...
Bitte warten ..
Mitglied: colinardo
03.03.2015, aktualisiert um 19:01 Uhr
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 ...
Im IE musst du es anders machen....
document.getElementById('my_object').contentDocument.parentWindow.deineFunctionImObject();
immer dieser IE grausam ...
Bitte warten ..
Mitglied: colinardo
03.03.2015, aktualisiert um 19:06 Uhr
Du kannst auch mal auf das Laden des Contents im Object warten und daran ein Event binden:
01.
<html> 
02.
	<head> 
03.
	</head> 
04.
	<body> 
05.
		<object id="my_object" data="load.html"></object> 
06.
		<script type="text/javascript"> 
07.
		document.getElementById('my_object').onload = function (){ 
08.
	              this.contentWindow.load_func(); 
09.
                  }; 
10.
		</script> 
11.
	</body> 
12.
</html>
Das geht hier ebenfalls problemlos ...
Bitte warten ..
Mitglied: mabue88
03.03.2015 um 19:07 Uhr
Gleiches Ergebnis...
Bitte warten ..
Mitglied: colinardo
03.03.2015, aktualisiert um 19:20 Uhr
sorry hier läufts ... latest Firefox 36 & Chrome (IE ausgenommen s.o.)
Bitte warten ..
Mitglied: colinardo
03.03.2015, aktualisiert um 19:11 Uhr
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 ...
Bitte warten ..
Mitglied: mabue88
04.03.2015, aktualisiert um 11:49 Uhr
Also bei mir will das irgendwie nicht funktionieren.

Deswegen bin ich jetzt doch den Weg gegangen, das alte Object aus der HTML zu entfernen und ein neues zu erstellen. Dazu übergebe ich dem neuen Object die Parameter des alten. Lediglich der 'data'-Parameter wird verändert.

Hier die entsprechende Javascript-Funktion:
01.
function UpdateObjectData(object_id, new_data){ 
02.
	var oo = document.getElementById(object_id);	// oo = old object 
03.
	if(oo == null)	return; 
04.
	 
05.
	document.body.removeChild(oo); 
06.
	 
07.
	var no = document.createElement("object");		// no = new object 
08.
	no.setAttribute("id", oo.id); 
09.
	no.setAttribute("data", new_data); 
10.
	no.setAttribute("onclick", oo.getAttribute("onclick").toString()); 
11.
	no.setAttribute("class", oo.className); 
12.
	 
13.
	document.body.appendChild(no); 
14.
}
Ich danke euch allen für eure Unterstützung!


PS: Ich habe innerhalb dem Object noch eine andere Problematik, aber dafür werde ich dann wohl bei Bedarf einen neuen Thread erstellen...
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershell - Mozilla (Firefox) COM-Object

gelöst Frage von internet2107Batch & Shell1 Kommentar

Hallo zusammen. Ich habe folgendes Problem. Ich würde gerne über eine powershell-GUI Applikation, den integrierten Webbroser nutzen. Das Problem ...

Batch & Shell

Array oder Object oder wie soll ich das machen

gelöst Frage von Druide83Batch & Shell4 Kommentare

Hallo, mal wieder verzweifelt. Wahrscheinlich ist die Lösung einfach, aber ich habe gerade keinen Kopf mehr zum klar denken. ...

Batch & Shell

Abfrage function und weitergabe der Parameter

gelöst Frage von complexBatch & Shell6 Kommentare

Hallo zusammen, bin leider noch blutiger anfänger im Bereich Powershell. Zu meinem Problem: Ich möchte ein Script schreiben, dass ...

Visual Studio

GetElementByID von String ohne WebBrowser

gelöst Frage von Aicher1998Visual Studio13 Kommentare

Hallo, Ich hab folgendes Problem: Ich möchte von einer bekannten Webseite Werte auslesen. Jetzt möchte ich aber keinen WebBrowser ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 18 StundenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 18 StundenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 1 TagDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 1 TagSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Exchange Server
Exchange Postfach Einbindung Betriebs-rat -Arzt, Bewerbung .
gelöst Frage von YellowcakeExchange Server23 Kommentare

Hey ich habe da mal eine Denksport Aufgabe bekommen Genutzt wird ein Exchange Server 2010. hier gibt es den ...

Windows Server
Downgrade von Windows Server 2016 auf 2012 - Wie vorgehen?
Frage von EstefaniaWindows Server13 Kommentare

Guten Ich habe eine Frage an Erfahrene unter euch. Durch einen InPlace Upgrade wurde Windows Server 2012 auf die ...

Windows Server
Delgegierte OU via RDP verwalten - Objektverwaltung zuweisen
gelöst Frage von TOAOICEWindows Server12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte in meiner Domäne (Server2016), einer Gruppe (OUAdmin) Berechtigungen auf die OU Test ...

Datenschutz
Telematikinfrastruktur Erfahrungsaustausch
Frage von MOS6581Datenschutz12 Kommentare

Moin, unter meinen Kunden befinden sich auch einige Ärzte, welche sich künftig mit der Telematikinfrastruktur-Geschichte der Gematik herumärgern dürfen. ...