Beantwortet VB 2010 Express und IE8

  • Montag, 17. Dezember 2012 16:37
     
     

    Hallo. Befasse mich schon geraume Zeit mit VB Express. Habe einen Scanner geschrieben, der HTML-Pages ausliest. Hierbei stoße ich immer häufiger auf den Hinweis, eine neue IE Browser Version zu nutzen (also innerhalb der aufgerufenen Webpage). Mit Einsatz von WebBrowser1 wird ja bekanntlich der IE6 angezogen. Kennt Jemand eine Möglichkeit, den IE8 statt des IE6 anzuziehen? Also schon mit der WebBrowser1 Komponente; als Applikation kann man den IE8 ja schon aufrufen.Dann wird aber ein separates Window aufgemacht. Hier kann dann aber nicht auf den Inhalt zugegriffen werden.

    Danke im Voraus

    LuckyHardy


    • Bearbeitet LuckyHardy Montag, 17. Dezember 2012 17:01
    •  

Alle Antworten

  • Montag, 17. Dezember 2012 17:26
     
     Vorgeschlagene Antwort

    Hi,

    schau mal hier:

      http://stackoverflow.com/questions/4612255/regarding-ie9-webbrowser-control

    Aber mal so gefragt: Warum liest Du die Seiten mit dem Webbrosercontrol aus? Wenn Du keine Interaktion mit der Seite abbilden willst und nur den Inhalt an sich haben willst, reicht auch HttpWebRequest oder WebClient.DownloadString


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

  • Dienstag, 18. Dezember 2012 16:20
     
     

    Hallo, Stefan.

    Habe die von Dir erwähnten solutions für die Fälle genommen, wo ich keine weitere Interaktion mit der Website benötige - z.B. Auslesen von Zinssätzen von Bankseiten.

    Wie komme ich aber mit den anderen weiter, wo ich z.B. ein Login machen möchte, oder innerhalb der Seite weitere aufrufen möchte - alles per Programm, versteht sich.

    Bei den Seiten, wo reklamiert wird, dass ich mit einem veralteten Browser arbeite - also durch WebBrowser1 Methode - wird das Ende des Ladevorgangs nicht erkannt.

    Es wird dann immer die 1 gesetzt - wartet auf complete.         L.G. Hardy

  • Dienstag, 18. Dezember 2012 17:35
     
     

    Hallo Hardy,

    eine mögliche Lösung für die anderen Seiten, die den veralteten Browser reklamieren, steht doch im ersten Link. Hast Du das mal probiert?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

  • Mittwoch, 19. Dezember 2012 07:13
     
     

    Hi, Stefan.

    Hatte ich das nicht schon geschrieben, dass unter XP der betreffende Schlüssel nicht in der REG vorhanden ist? Also eine Lösung für XP ist für mich da nicht in Sicht. Hast Du noch einen anderen Tip?

    Lieben gruß Hardy

  • Mittwoch, 19. Dezember 2012 08:27
    Besitzer
     
     

    Bei den Seiten, wo reklamiert wird, dass ich mit einem veralteten Browser arbeite - also durch WebBrowser1 Methode - wird das Ende des Ladevorgangs nicht erkannt.

    Hallo LuckyHardy,

    Schau Dir mal folgende Links an. Vielleicht können sie Dir weiterhelfen:

    Dynamically adding MSHTML to an application – „Unfortunately, DocumentComplete won't fire on all systems! Search the web for "DocumentComplete not firing" - it's a surprisingly widespread problem. The core reason is that the Microsoft.Mshtml assembly isn't installed on all machines.“

    Internet Explorer - DocumentComplete feuert nicht

    Versuch, ein Drop-Ziel zu widerrufen, das nicht registriert wurde – hier habe ich das WebBrowser Stuerelement aus SHDocVw.dll verwendet (Dim WithEvents IE As SHDocVw.InternetExplorer)

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

  • Mittwoch, 19. Dezember 2012 13:26
     
     

    Hallo, Robert.

    Danke für Dein Einschalten in mein Problem. Habe die Links mal aufgerufen und für mich entschieden, dass mir das nicht wirklich weiterhilft. Überdies scheint mir, der ich über 30 Jahre auf IBM Großrechnern programmiert habe, doch sehr kompliziert. 

    Ist es wirklich sooo schwierig, dem "Webbrowser1" zu überreden, den im Sytem installierten Browser ( IE8 in meinem XP) zu nehmen?

    Gruß

    Hardy

  • Mittwoch, 19. Dezember 2012 14:17
    Besitzer
     
     Vorgeschlagene Antwort

    Hatte ich das nicht schon geschrieben, dass unter XP der betreffende Schlüssel nicht in der REG vorhanden ist?

    Hallo LuckyHardy,

    Unter meinem Windows XP Professional Service Pack 3 x86 habe ich folgenden Schlüssel gefunden:

    HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
    "sllauncher.exe" = REG_DWORD 8000 (Hex: 0x1F40)

    Lies mal hier über IE8 Standards Mode (Forced): More IE8 Extensibility Improvements

    Websites may render differently in the built-in Windows App webbrowser than they do in Internet Explorer à

    „To change the compatibility mode to IE8 or IE9, determine if you are using a 32 or 64 bit version of the Windows Operating System (Windows XP, Vista, or 7), and then follow the appropriate instructions below:

    •32 bit operating system à In the registry, go to

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

     and add a New DWORD with the name "OrganizeMyCollection Windows App.exe" and a Decimal value of 7000 (for IE7), 8000 (for IE8), or 9000 (for IE9).

    •64 bit operating system à  In the registry, go to

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

     and add a New DWORD with the name "OrganizeMyCollection Windows App.exe" and a Decimal value of 7000 (for IE7), 8000 (for IE8), or 9000 (for IE9).“

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

  • Donnerstag, 20. Dezember 2012 13:09
     
     Beantwortet

    Hallo, Robert.

    Danke für die Hinweise.

    Habe die entsprechenden Keys in der REG eingegtragen. Der Test war zunächst negativ.

    Erst als ich  m e i n e   spezifische Test-App "WEB-Test.exe" unter FEATURE_BROWSER_EMULATION für den IE8 eingetragen habe, kam kein Hinweis mehr über einen veralteten Browser.

    Wenn dies nun aber bedeutet, dass die entsprechende App dann immer auf dem betreffenden PC / Server eingetragen werden muss, auf dem sie mal Laufen soll, ist dies aber keine absolute Lösung.

    Was denkst Du, kann man auch eine Wildcard-Definition eintragen? Hast Du da Erfahrung mit gesammelt.

    Danke für Deine Mühe bisher ;-)

    ein super Forum, wo man auch mal nicht ganz triviale Fragen loswerden kan und wortet bekommt!

    Gruß Hardy 

    • Als Antwort markiert LuckyHardy Freitag, 21. Dezember 2012 15:29
    •  
  • Donnerstag, 20. Dezember 2012 14:26
    Besitzer
     
     

    Wenn dies nun aber bedeutet, dass die entsprechende App dann immer auf dem betreffenden PC / Server eingetragen werden muss, auf dem sie mal Laufen soll, ist dies aber keine absolute Lösung.

    Hallo LuckyHardy,

    Gerne. Freut mich dass es klappt.

    Kannst Du ein wenig deutlicher beschreiben was Du hier meinst? Soll diese Anwendung auch auf anderem PC/Server installiert werden (bei Kunden)? Wenn ja wie soll diese Installation stattfinden? Wie stellst Du Dir das vor?

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

  • Donnerstag, 20. Dezember 2012 15:47
     
     

    Hallo, Robert.

    Über das "Wie" und für "Wen" überhaupt ich Programme zu Verfügung stellen möchte, habe ich mir noch keine konkreten Gedanken gemacht. Wenn man so rum-experimentiert, kommt man natürlich schon auf das Eine oder Andere, was man realisieren kann. Habe z.B. eine App geschrieben, mit der man Fonds überwachen kann. Wäre dann natürlich toll, wenn es möglich wäre, so zu sagen per Mouseclick Fonds zu erwerben bzw. zu veräußern. Na ja, nur mal so gesponnen. 

    Ich denke nach wie vor, dass hier eitgentlich Microsoft am Zug ist. Es kann doch nicht sein, dass ein Tool auf veraltete Softwareversionen zurückgreift.

    Ein Key in der Registry für die "Webbrowser1"-Methode könnte doch dieselbe Funktion übernehmen, welche ich durch die "Einzel-Definition" per App mache. Eine entsprechende Realisierung kann doch eigentlich nicht sooo schwierig sein.

    L.G.

    Hardy

  • Donnerstag, 20. Dezember 2012 17:58
     
     Vorgeschlagene Antwort Enthält Code

    Hallo Hardy,

    nuja, IE 8 ist "veraltet", Windows XP ebenso, ...

    Letztendlich ist das, was Du da siehst, wahrscheinlich ein Problem der Webseiten selbst (zumindest, wenn es ihnen nicht relativ egal ist, welche IE Version das wie anzeigt). Durch die fehlende Angabe des DOCTYPE rendert IE (und nichts anderes ist das WebBrowser Control) wahrscheinlich im Quirks Mode. Und da kommt selten was gutes bei raus.

    Ich denke nicht, dass Microsoft da auch nur irgendwas ändern wird. Letztendlich wäre es sicherlich am einfachsten, wenn man dem Webbrowser Control bspw. "WebBrowser1.CompatibilityMode = 9000" oder ähnliches mitgeben könnte. Aber Du bist ja nicht der erste und wahrscheinlich auch nicht der letzte, der sowas gerne hätte. Eingebaut wurde es bisher aber nicht.

    Wenn Du die ausgelesenen Seiten parsen (also bspw. Bilder, Links, ... auslesen) willst, schau dir mal das hier an:

      http://htmlagilitypack.codeplex.com/

    Damit geht das erheblich besser.

    Auch andere Interaktion wie "Login" (was nichts anderes ist als ein weiterer [meist POST] Request mit bestimmten Daten, die im Request übermittelt werden) sind problemlos ohne WebBrowser Control möglich.

    Falls dich eigentlich nur stört, dass die Websites deine Anwendung als "bösen, alten Browser" ansehen, ändere einfach den UserAgent. Das geht bspw. so:

    webBrowser1.Navigate( "<Url>", null, null, "User-Agent: Ich Bins, dein UserAgent" );
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

  • Freitag, 21. Dezember 2012 07:39
    Besitzer
     
     

    Hallo LuckyHardy,

    Ich möchte Dich bitte folgendes lesen und die Beiträge die Dir geholfen haben zu bewerten. Vielen Dank.

    Nutzen Sie die Bewertungsfunktionen ("Antwort" und "Hilfreich") in den MSDN Foren! Unter anderem können andere später eine Lösung schneller finden. Es ist also wünschenswert, dass die fragenden (Benutzer) die Beiträge anderer Beantworter bewerten. Hier dazu die wichtigsten Anhaltspunkte aus den Forenregelnund FAQs.

    Lösungsbeiträge als „Die Antwort“ markieren
    Bitte markieren Sie den Beitrag, der zur Lösung geführt hat, als "Die Antwort". Durch Bewerten eines Beitrags als "Die Antwort" können andere Teilnehmer die Lösung schneller finden. Außerdem können Sie dem Benutzer, der die Antwort eingereicht hat, für seinen Beitrag danken und zur Steigerung der Antwortqualität in der Diskussionsgruppe beitragen. [Quelle: Forenregeln]

    Bitte markiere den/die Beiträge als Antwort, die dir geholfen haben, dein Problem zu lösen. Das ist zum einen eine Anerkennung für die Autoren dieser Beiträge, zum anderen hilft es zukünftigen Lesern, sich in diesem Thread besser zu orientieren und Antworten auf ihre Fragen schneller zu identifizieren.

    Wie zeige ich an, dass meine Frage durch einen Beitrag beantwortet wurde?

    Wie bewerte ich einen Beitrag als hilfreich? Um einen Beitrag als hilfreich zu bewerten, klicken Sie in einem beliebigen Beitrag auf Als hilfreich bewerten. Sie können Ihre Stimme nur einmal für einen Beitrag abgeben. [Quelle:
    Häufig gestellte Fragen]

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

  • Samstag, 22. Dezember 2012 11:36
     
     

    Hallo, Stefan.

    Möchte nur kurz auf Deine Nachricht antworten: Warum verhält sich dann VB 2010 Express unter WIN 7 genau so, wie unter XP. WIN 7 kann man ja wohl kaum veraltet nennen, nur weil bereits WIN 8 verfügbar ist. 

    Danke auch für Deine Beiträge und somit für die Zeit, die Du mir gewidmet hast.

    Ein  frohes Weihnachtsfest und alles Gute für 2013 wünsche ich Dir und allen, die mir geholfen haben.

    Lieben Gruß

    Hardy

  • Samstag, 22. Dezember 2012 11:59
     
     

    Hallo, Stefan.

    Ich bin's nochmal. Habe Deinen "Navigate" mal ausprobiert.

    Null akzeptiert VB 2010 Express nicht: sollte stattdessen "DBNull" verwsenden. Geht aber auch nicht, da meckert er dann: Fehler 1 "DBNull" ist ein Typ und kann nicht als Ausdruck verwendet werden. 

    Gruß

    Hardy

  • Sonntag, 23. Dezember 2012 15:58
     
     
    Am Sat, 22 Dec 2012 11:59:32 +0000 schrieb LuckyHardy:
     
    Hallo Hardy,
     
    > Null akzeptiert VB 2010 Express nicht: sollte stattdessen "DBNull" verwsenden. Geht aber auch nicht, da meckert er dann: Fehler 1 "DBNull" ist ein Typ und kann nicht als Ausdruck verwendet werden.
     
    versuch' mal DBNull.value
     
    Ciao,
    Georg
     
  • Sonntag, 23. Dezember 2012 16:44
     
     

    Hallo, Georg.

    Nett von dir zu hören ;-)

    Bekam bei dem Versuch, Deine Anregung umzusetzen folgende Meldung:

    Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "Navigate" mit diesen Argumenten aufgerufen werden kann:
        "Public Sub Navigate(urlString As String, targetFrameName As String, postData() As Byte, additionalHeaders As String)": Der Wert vom Typ "System.DBNull" kann nicht in "String" konvertiert werden.
        "Public Sub Navigate(urlString As String, targetFrameName As String, postData() As Byte, additionalHeaders As String)": Der Wert vom Typ "System.DBNull" kann nicht in "1-dimensionales Array von Byte" konvertiert werden.
        "Public Sub Navigate(url As System.Uri, targetFrameName As String, postData() As Byte, additionalHeaders As String)": Der Wert vom Typ "String" kann nicht in "System.Uri" konvertiert werden.
        "Public Sub Navigate(url As System.Uri, targetFrameName As String, postData() As Byte, additionalHeaders As String)": Der Wert vom Typ "System.DBNull" kann nicht in "String" konvertiert werden.
        "Public Sub Navigate(url As System.Uri, targetFrameName As String, postData() As Byte, additionalHeaders As String)": Der Wert vom Typ "System.DBNull" kann nicht in "1-dimensionales Array von Byte" konvertiert werden. 

    Mein Aufruf sieht so aus:

     

     With WebBrowser1
                .Tag = "Load"
                .Navigate(sURL, DBNull.Value, DBNull.Value, "Hi bin Dein Karrier")


                While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
                    'Debug.WriteLine("1 waiting for complete ...  " & WebBrowser1.ReadyState)
                    'MsgBox("Waiting for URL: " & vbCrLf & vbCrLf &
                    '       url & vbCrLf & vbCrLf &
                    '       "loading to complete ...  " & WebBrowser1.ReadyState)
                    Application.DoEvents()
                    wtc = wtc + 1
                    Debug.WriteLine("waiting for complete ...  " & wtc.ToString & " - " & WebBrowser1.ReadyState)
                End While

                MsgBox("Loading for URL: " & vbCrLf & vbCrLf &
                                      url & vbCrLf & vbCrLf &
                                      "completed.")
            End With

    Gruß und ein schönes Weihnachtsfest

    Hardy

  • Sonntag, 23. Dezember 2012 19:06
     
     
    Hallo Hardy,
    Am Sun, 23 Dec 2012 16:44:27 +0000 schrieb LuckyHardy:
    >
    >  With WebBrowser1
    >             .Navigate(sURL, DBNull.Value, DBNull.Value, "Hi bin Dein Karrier")
    hab' jetzt leider keinen 'passenden' Rechner hier zum probieren.
    Versuch doch mal statt der Null 'Nothing' zu übergeben, klingt mir in dem
    Zusammenhang logischer.
    Viel Erfolg,
    schöne Feiertage,
    Georg
  • Montag, 24. Dezember 2012 11:40
     
     

    Hi, habe ich mal eben ausprobiert.

    Hat nichts bemängelt, aber das gewünschte Ergebnis wurde nicht erreicht - wie von Stefan prognistiziert.

    Die Meldung: "

    Sie benutzen eine veraltete Browserversion. Hierbei können Fehler bei der Nutzung des
    Internet-Angebotes der ING-DiBa auftreten. Bitte verwenden Sie eine aktuelle Browserversion.

    "

    Kommt immer noch.

    Lieben Gruß und frohe Weihnachten

  • Montag, 31. Dezember 2012 11:35
    Besitzer
     
     
    Ein  frohes Weihnachtsfest und alles Gute für 2013 wünsche ich Dir und allen, die mir geholfen haben.

    Hallo LuckyHardy,

    Ebenfalls. Alles Gute für 2013 wünsche ich Dir auch.

    Grüße,

    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

  • Montag, 31. Dezember 2012 13:08
    Besitzer
     
      Enthält Code

    Hallo LuckyHardy,

    Schau Dir mal an was da jeder Parameter von webBrowser1.Navigate bedeutet:

    Changing the User Agent in a web browser control …also wäre das in Visual Basic zum Beispiel: WebBrowser1.Navigate("http://whatsmyuseragent.com/", "_self", Nothing, "User-Agent: Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3")

    Schau Dir auch die Variante mit UrlMkSetSessionOption an. Vielleicht kann sie Dir weiterhelfen.

    Changing the UserAgent of the WebBrowser control -Winforms C#

    [VB.NET Beispiel]

    - VB code snippet -
    
    
    Imports System.Runtime.InteropServices
    Public Class Form1
        <DllImport("urlmon.dll", CharSet:=CharSet.Ansi)> _
        Private Shared Function UrlMkSetSessionOption(ByVal dwOption As Integer, ByVal pBuffer As String, ByVal dwBufferLength As Integer, ByVal dwReserved As Integer) As Integer
        End Function
        Const URLMON_OPTION_USERAGENT As Integer = &H10000001
        Public Function ChangeUserAgent(ByVal Agent As String)
            UrlMkSetSessionOption(URLMON_OPTION_USERAGENT, Agent, Agent.Length, 0)
        #End Function
    
    
    
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            ChangeUserAgent("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3")
            WebBrowser1.Navigate("http://whatsmyuseragent.com/", "_self", Nothing, "User-Agent: Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3")
        End Sub
    End Class
    - end -

    Grüße,

    Robert

    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-PrinzipEntwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.