Announcement

Collapse
No announcement yet.

TCppWebBrowser: Quelltext vor dem Rendern ändern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TCppWebBrowser: Quelltext vor dem Rendern ändern

    Hallo Gemeinde,

    ich möchte für einen bestimmten Zweck HTML Seiten über TCppWebBrowser laden. Dabei möchte ich den Quelltext nach dem Download ändern bevor dieser gerendert wird (also bevor die Komp. die Seite lädt / anzeigt).

    Ich bin die Suchergebnisse hier im Forum mal schnell durchgegangen, leider ohne das passende Thema gefunden zu haben. Google hat auch nicht wirklich geholfen (ich weiß nicht, wie ich die Suchanfrage formulieren soll). Hat jemand einen Rat?
    Zuletzt editiert von Gast_1; 14.11.2008, 15:25.

  • #2
    Sehe so keine Möglichkeit um source vorher zu ändern.

    Aber du kanst mit eine separate http componente die seite downloaden, dan ändern un dann in den Webbrowser einspeisen.

    Zum beispiel in OnBeforeNavigate2():

    *Cancel = (TOLEBOOL)true;
    AnsiString TheURL = (AnsiString )*URL;

    ShowMessage ( TheURL );
    // mit ein Get() von ein HTTP componente die seite holen

    // ändern
    // einspeisen
    return;

    Comment


    • #3
      Und hier ein Beispiel zum holen der Seite mit Indy

      http://www.marquardtnet.info/cecke/q...quicky_44.html
      Christian

      Comment


      • #4
        Daran habe ich schon gedacht. Das Problem ist nur, wenn ich die Seite (Datei) lokal lade, versucht die Komp. andere Dateien (Bilder, CSS, ect...) ebenfalls vom lokalen Ort zu laden, statt von der Webseite. Das soll ja nicht passieren.

        Oder ist mit "einspeisen" eine andere Vorgehensweise als Navigate() gemeint?

        Comment


        • #5
          Dann musst du alle Verweise auf die externen Daten ersetzen, mit den lokalen Angaben
          Christian

          Comment


          • #6
            Originally posted by Stanislav Eckert View Post
            Das Problem ist nur, wenn ich die Seite (Datei) lokal lade,
            Welche Seite gehst du lokal laden? Wass meinst du genau?

            ...versucht die Komp. andere Dateien (Bilder, CSS, ect...) ebenfalls vom lokalen Ort zu laden, statt von der Webseite.
            Welche Komp? HTTP ode WebBrowser?

            Oder ist mit "einspeisen" eine andere Vorgehensweise als Navigate() gemeint?
            Sicher.

            Aber bitte fänge an besser deine Vorgehensweise zu bescgreiben sonst können wir nur raten wass du machtst.

            Comment


            • #7
              Originally posted by Hans G View Post
              Welche Seite gehst du lokal laden? Wass meinst du genau?
              Die, die vorher über die HTTP-Komp. runtergeladen wurde? Das war doch dein erster Vorschlag.

              Welche Komp? HTTP ode WebBrowser?
              Nachwievor die selbe: CppWebBrowser. Mit anderen Komponenten (z. B. TIdHTTP) würde es ja auch wohl kaum möglich sein (oder Sinn machen), lokale Dateien ohne installierten Webserver zu laden.

              Aber bitte fänge an besser deine Vorgehensweise zu bescgreiben sonst können wir nur raten wass du machtst.
              Hans, es gibt keine. Ich wollte ja nichts selbst parsen und runterladen sondern nur den Quelltext in CppWebBrowser modifizieren. Ich hab inzwischen was passendes gefunden. Zwar kann ich damit nicht verhinden, dass evtl. nachher gefilterte Dateien runtergeladen werden, aber das reicht mir eigentlich:

              Code:
                IHTMLDocument2 *HTMLDocument = NULL;
              
                if (SUCCEEDED(Browser->Document->QueryInterface(IID_IHTMLDocument2,(LPVOID*)&HTMLDocument)))
                {
                  IHTMLElement *HTMLBody = NULL;
                  if (SUCCEEDED(HTMLDocument->get_body(&HTMLBody)))
                  {
                    BSTR HTMLSource;
                    if (SUCCEEDED(HTMLBody->get_outerHTML(&HTMLSource)))
                    {
                      HTMLSource = (WideString)StringReplace(HTMLSource, "ersetzmich", "durchmich", TReplaceFlags() << rfReplaceAll);
                      HTMLBody->put_innerHTML(HTMLSource);
                    }
                    HTMLBody->Release();
                  }
                  HTMLDocument->Release();
                }

              Comment

              Working...
              X