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;
    `}


  • @Achromat sagte in DHTML InnertText readout:

    SUCCEEDED

    soso. SUCCEEDED 😉

    MFG



  • @_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 😉


  • Gesperrt

    @_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.



  • @omggg

    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.


  • Gesperrt

    @Achromat Am besten, oxide ganz in Ruhe lassen/ignorieren. Wahrscheinlich hat der (genau wie Konrad im anderen Forum) hier einen Freibrief zum Trollen.


Anmelden zum Antworten