none
Strategien um CHtmlView "absturzsicher" zu machen RRS feed

  • Frage

  • Hi,

    ich habe eine Anwendung, die in einem CHtmlView Html-Seiten quasi als gedockte Info-Anzeige anzeigt.
    Nun stürzt meine Anwendung leider ab bei Anzeige der Html-Seite.

    Der Anbieter der Html-Seite lädt über einen Ad-Server Werbung nach. Zumindest sehe ich noch "Auf http://adclient.... warten" in meiner StatusBar. Der Callstack vom Absturz beginnt mit mehrfachen Flash.ocx!<Adresse> und irgendwann ein mshtml.dll!CDispNode::AddPreNodeTransform()

    Scheinbar setzt also die aktuell eingeblendete Werbung noch Flash ein welches alles in den Orkus befördert.

    Nun ist das was in der Html-Seite angezeigt wird nur eine unwichtige Zusatzinfo für unsere Anwender. Ich würde also gerne das CHtmlView irgendwie so auslagern dass die Html-Anzeige gerne abstürzen darf...

    Aber welche Strategien sind realisierbar?

    Tschüß, Holger.

    Montag, 4. Januar 2016 12:57

Antworten

  • Ich habe jetzt folgende Lösung angefangen:
    Mein Hauptprogramm startet einen Hilfs-Prozess. Mit etwas Voodoo (sprich IPC) lässt der Hauptprozess den Hilfsprozess meine CHtmlView als Stellvertreter erzeugen.
    Der Trick dabei: Das Parent-Window-Handle ist dabei dasjenige aus dem Hauptprogramm!

    Für den Endanwender sieht es so aus, als ob alles weiterhin ein Programm ist. Das ein Child-Window aus einem anderen Prozess eingebunden ist ja transparent.
    Wenn jetzt der Hilfsprozess abraucht, verschwindet zwar automatisch auch mein Info-html-Fenster, dafür lebt mein Hauptprogramm immerhin weiter.

    Tschüß, Holger.

    Dienstag, 5. Januar 2016 14:54

Alle Antworten

  • Gar keine. Wir haben das gleiche Problem teilweise mit Xing Seiten. Auch hier die Ursache: Werbung. Das verrückte ist, dass dies auf manchen Rechner passiert auf anderen nicht.

    Bei manchen Rechnern greift sogar der Security Code im IE, der einen provozierten Buffer-Overrun vermutet und killt die Anwendung brutal. Da greift nicht mal ein selbst definierter Crash Handler...

    Das Problem ist, dass man den Crash eben nicht ignorieren kann, wenn es eben der IE nicht behandelt, oder auch selbst behandelt. Letzten Endes wird das Control unbenutzbar, egal was man macht.

    Hier muss entweder Adobe, oder MS nachbessern.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Montag, 4. Januar 2016 15:30
    Moderator
  • Hallo Martin und Hallo Holgr.

    Beim WebBrowser-Control der .NET-Klassen ist es möglich, alle Downloads, die die Seite ausführen will, abzufangen und vorher zu prüfen. Vielleicht, dass kann ich nicht genau sagen, ist das auch eurer Klasse machbar.

    Wenn ja, könntet ihr doch einfach selber "Werbeblocker" spielen und alle Seitenfremden und Scripte, oder einfach alle Flash-Anfragen abbrechen.


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Montag, 4. Januar 2016 19:44
  • Ja. So was wäre auch mit dem HTML-Control möglich.
    Die Fraqe ist dann nur wieder: Was gehört zur Seite was nicht.

    Aber technisch ist das sicher eine Möglichkeit. Man müsste eine Art Blacklist einbauen, die bestimmte Seiten/URLs/Elemente ignoriert


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Dienstag, 5. Januar 2016 13:55
    Moderator
  • Wenn es immer die selbe Seite ist bzw. nur an den Flasch-Scripten liegt, dann kannst du doch einfach alle Flash-Daten blocken. Also einfach alle HTTP-Aufrufe von .swf-Dateien blockieren.
    Ansonsten, fertige Blacklisten gibt es genügend. Nimm einfach eine von einem Werbeblocker.

    https://easylist-downloads.adblockplus.org/easylist.txt


    © 2015 Thomas Roskop
    Germany //  Deutschland

    Dienstag, 5. Januar 2016 14:35
  • Ich habe jetzt folgende Lösung angefangen:
    Mein Hauptprogramm startet einen Hilfs-Prozess. Mit etwas Voodoo (sprich IPC) lässt der Hauptprozess den Hilfsprozess meine CHtmlView als Stellvertreter erzeugen.
    Der Trick dabei: Das Parent-Window-Handle ist dabei dasjenige aus dem Hauptprogramm!

    Für den Endanwender sieht es so aus, als ob alles weiterhin ein Programm ist. Das ein Child-Window aus einem anderen Prozess eingebunden ist ja transparent.
    Wenn jetzt der Hilfsprozess abraucht, verschwindet zwar automatisch auch mein Info-html-Fenster, dafür lebt mein Hauptprogramm immerhin weiter.

    Tschüß, Holger.

    Dienstag, 5. Januar 2016 14:54