Laden...

ScrollPosition im WebBrowser gibt ab dem zweiten Aufruf eine Exception

Erstellt von _Cashisclay vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.412 Views
_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren
ScrollPosition im WebBrowser gibt ab dem zweiten Aufruf eine Exception

Hallo zusammen,

hat jemand schon mal versucht die ScrollPosition vom WebBrowser rauszubekommen?

Ich versuch es jetzt schon einige Zeit, krieg ich sie auch beim ersten mal zurück, beim nächsten mal dann aber nur noch eine Fehlermeldung .. > Fehlermeldung:

"Ausnahme von HRESULT: 0x800A01B6 / NotSupportedException"

Aktuell bekomme ich sie so :

If WebBrowser.Document IsNot Nothing Then

Dim htmlDoc As HTMLDocument = WebBrowser.Document

If htmlDoc IsNot Nothing Then

With htmlDoc.getElementsByTagName("HTML")(0)

MsgBox(.ScrollLeft)

MsgBox(.ScrollTop)

End With

End If

End If

Grüße

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Nein, ich mach ja das gleiche und krieg dann die Fehlermeldung.

5.658 Beiträge seit 2006
vor 6 Jahren

Hi _Cashisclay,

wenn man mal nach dem ErrorCode googelt, dann kommt man schnell auf den Hinweis, daß man den ReadyState des WebBrowsers abfangen muß. Hier ein paar Links, vielleicht hilft es weiter:
https://social.msdn.microsoft.com/Forums/ie/en-US/82b99cd5-869b-4b57-880f-478df7661778/documentbodyinnertext-0x800a01b6-error?forum=iewebdevelopment
https://stackoverflow.com/questions/10071048/internet-explorer-automation-busy-v-s-readystate-property/10071209#10071209

Weeks of programming can save you hours of planning

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Der Readystate steht im ersten Fall (wo keine Fehlermeldung kommt) auf complete
und beim zweiten Mal ebenso auf Complete wo allerdings die Fehlermeldung erscheint.

5.658 Beiträge seit 2006
vor 6 Jahren

Per Ferndiagnose läßt sich halt schwer sagen, was die Unterschiede zwischen dem ersten und dem zweiten Aufruf sein könnten.

Die Frage ist halt, ob es sich lohnt, da so viel Zeit reinzustecken. Als Alternative könntest du evtl. ein anderes WebBrowser-Control verwenden.

Weeks of programming can save you hours of planning

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Was wäre denn ein anderes? Kenn in WPF nur das eine.

5.658 Beiträge seit 2006
vor 6 Jahren

Erster Treffer bei Google: C# WPF WebBrowser alternative

Weeks of programming can save you hours of planning

1.040 Beiträge seit 2007
vor 6 Jahren

Aus welchem Namespace stammt dein HTMLDocument?

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren
Return XmlDocument.InnerXml
1.040 Beiträge seit 2007
vor 6 Jahren

Ja, ne. 🤔
Aus welchem Namespace?

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Sorry lange Leitung .. MSHTML

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Konnte das denn jetzt mal jemand nachstellen?

Dim htmlDoc As HtmlDocument = wb.Document
Dim scrollTop As Integer = htmlDoc.GetElementsByTagName("HTML")(0).ScrollTop

Bei mir klappt es wie gesagt nur beim ersten mal, einen alternativen WebBroswer werde ich mir mal ansehen, wüsste trotzdem gern wo der Fehler liegt, falls jemand eine Idee hat.

1.040 Beiträge seit 2007
vor 6 Jahren

Also in meinem Testprojekt (C#) gibt es damit keine Probleme.

Was mich verwundert: du nutzt HtmlDocument, obwohl die Klasse im mshtml-Namespace HTMLDocument heißt.

public TestView()
{
    InitializeComponent();
    _webBrowser.Navigate("https://www.mycsharp.de/wbb2/thread.php?threadid=120311");
}

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    var htmlDocument = _webBrowser.Document as HTMLDocument;
    _textBoxTop.Text = htmlDocument.getElementsByTagName("HTML").item(0).ScrollTop.ToString();
    _textBoxLeft.Text = htmlDocument.getElementsByTagName("HTML").item(0).ScrollLeft.ToString();
}

Ist nur dirty im CodeBehind runter getippt. Gibt nach jedem Klick auf den Button aber Werte aus.

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Heißt bei mir auch ganz normal HTMLDocument

'Dim doc As mshtml.HTMLDocument = WebBrowser.Document

                                'If Not doc.getElementsByTagName("html").length = 0 Then

                                '    If doc.readyState = "complete" Then

                                '        MsgBox(doc.getElementsByTagName("html")(0).ScrollLeft.ToString)

                                '        MsgBox(doc.getElementsByTagName("html")(0).ScrollTop.ToString)

                                '    End If
'End If

Kann es am Inhalt des WebBrowser liegen? Oder weil der Inhalt über ein Binding dargestellt wird?

Hm..

1.040 Beiträge seit 2007
vor 6 Jahren

Probiere es doch mal mit meinem Link aus. 😉

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Damit geht es .. es scheint also mit der Quelle meiner Daten zusammenzuhängen

Bzw. macht es einen Unterschied für das Auslesen der Scrollwerte ob ich es mit Navigate oder z.B. NavigateToString anzeige?

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Wegen der Zeile :

<meta http-equiv="X-UA-Compatible" content="IE=11"></meta>

Kommt der Fehler ständig, wenn ich das ganze auf IE=8 stelle funktioniert es.. allerdings sieht es dann nicht mehr so aus wie gewünscht .. es ist zum verzweifeln.

16.827 Beiträge seit 2008
vor 6 Jahren

Die Engine des Browser Controls ist uralt (IE7).
Sie funktioniert auch an vielen Stellen einfach mit modernen Webseiten nicht mehr.
Daher ist sie auch einfach nicht mehr empfohlen.

Sehr ähnliches Thema hier im Forum bzgl. dieses Engine Problems:
Im Webbrowser control soll Script debugging deaktiviert werden

_
_Cashisclay Themenstarter:in
277 Beiträge seit 2014
vor 6 Jahren

Hat denn jemand schon mal "erfolgreich" eine alternativen WebBrowser benutzt? CefSharp krieg ich bei mir unter VS10 nicht eingebunden..

Alternativen haben bis jetzt auch noch nicht geklappt.

Grüße

Edit: Ich geb es auf, das kostet mich einfach zu viel Zeit und zu viele nerven, geht halt nicht.