Announcement

Collapse
No announcement yet.

Webbrowser Scrollposition

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

  • Webbrowser Scrollposition

    Guten Morgen Community

    In einem WebbroserControl aktualisiere ich ständig die neuen Werte. Gibt es keine Möglichkeit die aktuelle Scrollposition zu ermitteln, um beim aktualisieren wieder an den gleichen Ort zu springen, an dem man zu letzt war?


    Habe schon ziemlich alles ausprobiert, auf der VB.Net-Seite
    - ScrollTop und ScrollLeft geben immer nur die Werte 0 aus.
    - GetElementsByTagName gibt auch immer einen falschen Wert aus

    Ich hab mir auch schon überlegt, ob es vielleicht möglich wäre, den kompletten Seiteninhalt in eine Variable zu speichern und ein Javascript hinzuzufügen, sofern das möglich ist. Wer könnte mir da helfen?


    Danke für die Hilfe.

    Freundiche Grüsse

    exc-jdbi
    Zuletzt editiert von Exc-JDBI; 15.07.2014, 08:58.

  • #2
    Bau doch vielleicht einfach eine Webseite die Du nicht ständig neu laden musst, sondern bau in die Webseite ein kleines Skript ein was sich ständig die neuen Werte holt und diese in der Webseite updated.

    Comment


    • #3
      Guten Tag fanderlf

      Danke für die Antwort.

      Wie meinst du das jetzt eigenlich ganz genau. Hört sich schon interessant an.

      Die Seite http://www.boerse.de im Sekundentakt runterladen, alle Werte in einer Datenbank (oder ähnlichem) festhalten und nacher auf einer selber gemachten Website die Daten wieder ausgeben?

      So viel Aufwand wollte ich eigenlich gar nicht betreiben ...

      Ich wollte nur, nachdem die Seite im Webbrowser aktualisiert wurde, nicht immer wieder runterscrollen. Bei mir springt der Scrollbalken immer auf 0 zurück. Daher meine Frage, ob es möglich wäre, den momentanen Scrollwert festzuhalten und nach Aktualisierung den Scrollbalken wieder an die entsprechende Stelle setzen.

      Ich hätte nicht gedacht, dass dies mit dem Webbroser so umständlich ist.

      Freundliche Grüsse

      exc-jdbi

      Comment


      • #4
        Warum überhaupt ein WebbrowserControl?

        Seite per HTTP Request abfragen,
        Quelltext parsen
        Die gewünschten Daten mit normalen Controls darstellen
        Christian

        Comment


        • #5
          Guten Tag Christian Marquardt

          Für mich wäre das WebbrowserControl genau das richtige um eine Seite im Netz anzuzeigen. Schaderweise ein bisschen umständlich, wenn es sich um eine grössere Seite handelt. Ich werde es aber nochmals versuchen. Irgend eine Möglichkeit wird es wohl geben, auch dieses Problem zu lösen.

          Danke

          Freundliche Grüsse

          exc-jdbi

          Comment


          • #6
            Also in Javascript kannst Du die Scrollposition abgreifen. Ich weiß nicht ob es eine Schnittstelle im WebBrowser Control gibt wo Du irgendwie in das Javascript greifen kannst. Falls ja könntest so vorgehen:

            1. Ein kleines Script in die Seite injizieren was Dir die aktuelle Scrollposition in Javascript ausrechnet und Dir diese in die VB Welt überträgt
            2. Seite neu laden
            3. Ein kleines Script in die Seite injizieren was in Javascript die Scrollposition wieder setzt.

            Allerdings weiß ich nicht in wie weit man mit dem Content interagieren kann.

            Comment


            • #7
              Danke fanderlf

              Ich hab das gerade vorher ausprobiert. Und leider funkt es nicht wie gewünscht. Ich kriege auch dann überall die Werte = 0.

              Ich frage mich langsam ob es nicht mit den Dokumenttyp zu tun hat. Das hier ist ja eine allgemeine Bezeichnung.

              Code:
              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                    "http://www.w3.org/TR/html4/loose.dtd">
              Es müsste vielleicht eine andere Bezeichung geben, damit diese Werte ScrollTop und ScrollLeft greifen. Und sonst frage ich mich wirklich für was man sie in den Webbrowser eingebaut hat.

              Ich werde es heute abend nochmals Versuchen

              Freundliche Grüsse

              exc-jdbi

              Comment


              • #8
                Der Documenttyp dürfte damit nichts zu tun haben
                Die integrierten Browser sind halt meistens nur "Notbrowser", die häfug nicht alles können
                Christian

                Comment


                • #9
                  Guten Abend Community

                  Für die, die es interessiert.

                  ScrollTop und ScrollLeft haben endlich Werte. Ich muss aber zugeben, es ist nicht profihaft gemacht. Man müsste noch die Script-[Fehler] im Html-Code aussondern, oder einfach behandeln. Und die Aktualisierung dauert seinen Moment.

                  Aber immerhin ist es so möglich, den vorherigen Scrollpunkt festzuhalten und nach Aktualisierung wieder an die entsprechende Stelle setzen.

                  Man könnte es ja mit einer weniger komplexen Webseite versuchen. Für den Anfang reicht das mir.

                  [highlight=vbnet]
                  Public Class Form1
                  Private scrY As Integer = 0
                  Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
                  Dim client As WebClient = New WebClient()
                  Dim reply As String = client.DownloadString("http://www.boerse.de")

                  reply = reply.Replace("http://www.w3.org/TR/html4/loose.dtd", String.Empty)
                  reply = reply.Replace("EN" & """" & " " & """" & """" & ">", "EN" & """" & ">")
                  Dim sb As New StringBuilder
                  sb.Append("<?xml version=" & """" & "1.0" & """" & " encoding=" & """" & "iso-8859-1" & """" & "?>" & vbNewLine)
                  sb.Append(reply)
                  Me.WebBrowser1.DocumentText = sb.ToString
                  Application.DoEvents()
                  End Sub
                  Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
                  If WebBrowser1.Document.Body IsNot Nothing Then
                  scrY = WebBrowser1.Document.Body.ScrollTop
                  Me.WebBrowser1.Refresh()
                  End If
                  Application.DoEvents()
                  End Sub
                  #Region "News *"
                  Public Sub New()
                  MyBase.New()
                  InitializeComponent()
                  Me.Timer1.Enabled = True
                  Me.Timer1.Interval = 20000
                  Me.Timer1.Start()
                  End Sub
                  #End Region
                  Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, _
                  ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEv entArgs) _
                  Handles WebBrowser1.DocumentCompleted
                  Me.WebBrowser1.Document.Window.ScrollTo(0, scrY)
                  Me.WebBrowser1.Invalidate()
                  End Sub
                  End Class

                  [/highlight]


                  Freundliche Grüsse

                  exc-jdbi

                  Comment


                  • #10
                    Cool Schön dass es geht. Vielen Dank fürs Posten der Lösung!!!

                    Comment


                    • #11
                      Gern geschehen

                      Freundliche Grüsse
                      exc-jdbi

                      Comment

                      Working...
                      X