DHTML InnertText readout
-
Hallo,
ich habe via dhtml einen Dialog offen, der hat ein primitives html geladen mit zwei input objekten.
Jetzt kann ich den Inhalt der Felder vom cpp aus beschreiben :
BOOL CHtmlSkinDlg::SetValue(CComBSTR pStrValueName, CComBSTR pStrValue) { IHTMLElementCollection* collection = NULL; CComPtr<IHTMLDocument2> pIDoc2; if (SUCCEEDED(GetDHtmlDocument(&pIDoc2))) pIDoc2->get_all(&collection); long count; collection->get_length(&count); IDispatch* mydiv; CComVariant varstr = pStrValueName; CComVariant varint = 0; collection->item(varstr, varint, &mydiv); IHTMLElement *htmldiv; mydiv->QueryInterface(IID_IHTMLElement, (void**)&htmldiv); CComBSTR html; htmldiv->get_innerHTML(&html); HRESULT hr = htmldiv->put_innerText(pStrValue); collection->Release(); return TRUE; }
Nun ist die Mutmaßung das man es auf selber weise wieder auslesen könne, das funktioniert aber nicht
der rück gelieferte ComBstr ist immer null:CComBSTR CHtmlSkinDlg::GetValue(CComBSTR pStrValueName) { IHTMLElementCollection* collection = NULL; CComPtr<IHTMLDocument2> pIDoc2; if (SUCCEEDED(GetDHtmlDocument(&pIDoc2))) pIDoc2->get_all(&collection); long count; collection->get_length(&count); IDispatch* mydiv; CComVariant varstr = pStrValueName; CComVariant varint = 0; collection->item(varstr, varint, &mydiv); IHTMLElement* htmldiv; mydiv->QueryInterface(IID_IHTMLElement, (void**)&htmldiv); CComBSTR html; htmldiv->get_innerHTML(&html); CComBSTR StrValue; HRESULT hr = htmldiv->get_innerText(&StrValue); collection->Release(); return StrValue; }
Frage warum kann nicht das innertText nicht gelesen werden dito das innertHtml ?
Danke für Hinweise
Karsten
-
@Achromat
vermutlich weil das HTML noch nicht geladen ist. Setze einen Handler auf das
load
-Event, dann sollte der Zugriff auf innerHTML oder innerText funktionieren.MFG
-
@_ro_ro sagte in DHTML InnertText readout:
eladen i
Wie schon beschrieben, kann ich mit SetValue bereits erfolgreich die Inhalte verändern, nun solle das Auslesen
auch so erfolgen : put_innerText funktiniert , get_innerText funktioniert nicht.Der Inhalt ist also längst geladen.
Danke für deine Hilfe !
Gruß Karsten
-
@Achromat
bedenke daß Schreibvorgänge ins DOM asynchron sind. Das Lesen funktioniert erst, wenn das DOM geladen ist. Kannste glauben
MFG
-
bedenke daß Schreibvorgänge ins DOM asynchron sind. Das Lesen funktioniert erst, wenn das DOM geladen ist. Kannste glauben
Nanu, das ist ja das Problem nicht das es nicht geladen hätte, sonnst könnte ich ja nicht bereits Felder sichtbar beschreiben.
Also die Frage war nicht wann es geladen hat oder ob, sondern warum mit der Funktion put_innerText
sich der Inhalt verändert, aber mit get_innerText null geliefert wird ?Danke für deine Hilfe, und viele Grüße aus Preußen
K.
-
@Achromat sagte in DHTML InnertText readout:
Nanu, das ist ja das Problem nicht das es nicht geladen hätte
Das Problem ist, daß Du es nicht geprüft hast und Dich vehement dagegen sträubst es zu tun. Natürlich siehst Du daß ein Schreibvorgang ins DOM funktioniert, aber das läuft eben asynchron. Von daher liefert ein Lesevorgang gleich nach dem Schreiben stets NULL.
Also bitte, hier ein Stück Code:
function lesen(event){ event.preventDefault(); // bei Bedarf console.log ( event.target.innerHTML ); } document.getElementById("meine_id").addEventListener("load", lesen);
MFG
-
Hallo,
danke für deine Hilfe, vehement kann ich nicht sagen, ich drücke Buchstaben um die Aktion "schreiben"
Auszulösen, dann einen anderen um zu lesen, du postest da Java Code, ich gehe an das dhtml aber
über das Com interface via c++ an.Mit Java gibt es keine Probleme.
-
@Achromat
Alles gut. Wenn ich schon daneben liege, dann richtig
Viele Grüße.
-
Alles gut. Wenn ich schon daneben liege, dann richtig
Ja aber es hat der lösungssuche beigetragen, man muss den Text über sein Attribut abholen
IHTMLElement* htmldiv; if (SUCCEEDED(mydiv->QueryInterface(IID_IHTMLElement, (void**)&htmldiv))) { CComVariant cV; CComBSTR bsProperty; bsProperty = "value"; htmldiv->getAttribute(bsProperty, 0, &cV); StrValue = cV.bstrVal; `}
-
-
@_ro_ro SUCCEEDED ist eine Windows konstante aus der Com ebene.
-
@Achromat
Danke. Jetzt will ich aber mehr wissen. Was machst Du da eigentlich?
Viele Grüße
-
Ich implementiere ein DHTML als Userinterface über eine GL -Engine, um das
Problem des selbst Zeichnens einer ganzen UI zu umgehen.
-
@Achromat
Coole Mucke, gefällt mir !!! Und Alle Achtung!!!!
MFG
-
@_ro_ro sagte in DHTML InnertText readout:
Coole Mucke, gefällt mir !!! Und Alle Achtung!!!!
Satzzeichen sind keine Rudeltieren... Aber davon ab, das ist ein reiner Offtopic-Betrag.
-
Im übrigen genau wie 95 Prozent deiner Beiträge. Inklusive deines Beitrags hier. Also was ist dein Punkt?
-
Macht euren Geistlosen Hate im Kindergarten, und nicht hier wo die Entwicklung der einzige Ausweg aus der Kranken Welt ist ihr Döselköppe.
Der Kollege hatte auf ein Video reagiert, das ich hier wegen hater wieder rausgenommen hatte :
-
@oxide Dein gesamtes Sein im Forum (siehe Historie) ist mit Scheiße besudelt, du hast null Plan von der Softwareentwicklung und willst hier einen auf schlaue Hose machen, früher gab es dafür was in die Fresse.
-
@Achromat sagte in DHTML InnertText readout:
Macht euren Geistlosen Hate im Kindergarten, und nicht hier wo die Entwicklung der einzige Ausweg aus der Kranken Welt ist ihr Döselköppe.
Und
@Achromat sagte in DHTML InnertText readout:
@oxide Dein gesamtes Sein im Forum (siehe Historie) ist mit Scheiße besudelt, du hast null Plan von der Softwareentwicklung und willst hier einen auf schlaue Hose machen, früher gab es dafür was in die Fresse.
Dann geh doch bitte mit gutem Beispiel voran.
-
@Achromat
Ich finde es interessant wie schnell das eskaliert. Vor allem wurde nix weiter geschrieben.
Androhungen von Gewalt und in dem anderen Fall die bitte auszureisen Aus Deutschland eines anderen Users.
Ich verstehe , dass man ein selbst organisiertes Forum braucht. Aber das dürfte ja dann langsam geahndet werden.
Viel Erfolg bei deinen Bemühungen ggf. Die Karriere zu wechseln ( So habe ich deinen Beitrag verstanden). Wird aber extrem schwer werden.
-
@Achromat Am besten, oxide ganz in Ruhe lassen/ignorieren. Wahrscheinlich hat der (genau wie Konrad im anderen Forum) hier einen Freibrief zum Trollen.