Alternative für Webbrowser

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Semiconductor.

    Alternative für Webbrowser

    Huhu liebe Community :)

    Der Webbrowser macht bei vielen neueren Webseiten leider Probleme. Diese beginnen mit Scriptfehlern, die ausgespuckt werden usw., bis hin zu kompletten Abstürzen, bzw. weißen Webseiten.

    Wenn man die Scripts supressed, ist dies auch keine elegante Lösung.

    Gibt es Alternativen bzw. eine Möglichkeit, die Engine vom Webbrowser aktualisieren zu können? Gibt es modifizierte Webbrowser, die bsp. Chrome/Firefox Engine nutzen?

    Ich nutze WIndows 10 als OS und die hat Edge bsp. integriert. Weiß jemand Bescheid über die Integration von Edge in die neueren VB.NET Versionen?

    Vielen lieben Dank!

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    webkitdotnet.sourceforge.net WebKit.NET benutzt intern wohl die selbe Rendering Engine wie Chrome.
    Wird aber auch wohl nicht mehr weiterentwickelt.
    (StackOverflow Artikel: stackoverflow.com/questions/21…se-chrome-as-browser-in-c)

    Und cefsharp.github.io Könntest du auch mal probieren. (Wird anscheinend auch noch regelmäßig aktualisiert)
    Quick Start findest du hier github.com/cefsharp/CefSharp/wiki/Quick-Start

    Semiconductor schrieb:


    Der Webbrowser ist einfach zu veraltet und funktioniert bei vielen Webseiten leider nicht.


    Das stimmt nicht so ganz. Das Element nutzt die HTML Darstellung vom Internet Explorer/Microsoft Edge, wenn du dies so willst. Du kannst es dir noch viel viel einfacher machen, als deinen kompletten Webbrowser(Control) zu wechseln.

    1. Öffne die RegEdit
    2. Gehe in folgenden Pfad: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
    3. Erstelle dort eine DWORD 32 Bit mit dem Namen deines Programmes(mit .exe)
    4. Öffne den erstellten Wert und klick auf Decimal
    5. Tippe dort für Microsoft Edge(die fortgeschrittenste Darstellung) "11001" und öffne dann erneut dein Programm.

    Nun sind einige Sachen zu beachten und Tipps habe ich auch für dich:

    - Hier findest du sämtliche Decimal Werte für die jeweilige Darstellung: msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx (Dein Webbrowser Control zeigt Seiten so falsch an, weil er den Wert "8888" standardmäßig nutzt und dieser der IE8 ist.)
    - Du kannst dort auch einen DWORD mit deinem Programm erstellen, dann müssen z.B Menschen mit denen du das Programm teilst, nicht manuell in die RegEdit.
    - Wenn du dein Programm mit dem Debugger startest, heißt die Datei nicht "Dateiname.exe", sie heißt "Dateiname.vshost.exe" Deshalb empfehle ich dir, direkt folgende DWORD's einzufügen:

    Dateiname.vshost.exe
    Dateiname.exe

    Dann bist du auf der sicheren Seite!

    Eine einfachere Lösung habe ich nicht gefunden, aber glaube mir, dies ist ziemlich simple und einfacher als es klingt! Ich hoffe, dir ist damit geholfen.
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    Sekki schrieb:

    - Du kannst dort auch einen DWORD mit deinem Programm erstellen, dann müssen z.B Menschen mit denen du das Programm teilst, nicht manuell in die RegEdit.
    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)
    Müsste doch für den kurzen Moment des Aufrufs genügen. Danach wieder zurück auf Original. Allerdings müsste beim Setup des Programms die Berechtigung für den RegKey geändert werden, so dass Standard-Benutzer diesen ändern kann.
    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)
    @petaod



    Du erlaubst dem Programm, den Microsoft Edge Browser zu benutzen. Mehr nicht. Deine anderen Programme sind davon überhaupt nicht betroffen. Theoretisch ist es nur eine Weiterleitung. Diese Methode ist ziemlich bekannt, komplett ungefährlich und unabhängig. Du könntest dort 40 Programme eintragen und alle würden normal laufen, die Systemleistung wäre nicht beeinträchtigt usw, da du deinem PC nur einen Verweis darauf gibst, dass das WebBrowser Control die Darstellung vom Microsoft Edge nutzt.

    Viele Programme(z.B Photoshop) nutzt ebenfalls den Verweis, sonst würde der WebBrowser im Adobe Creative Lab(ich glaube, dass dies der Fall ist) entweder die IE8 Darstellung nutzen, oder gar nicht erst funktionieren. Und wie du siehst, löscht Photoshop den Eintrag auch nicht mehr raus. Das gleiche macht z.B auch OneDrive und mein Wacom Tablet. Also brauchst du dir da keine Sorgen zu machen.

    Den SqlDumper z.B habe ich programmiert und dort eingetragen und ich bin verdammt glücklich, diese Methode gefunden zu haben. Schnell, einfach und elegant genug. Sicher gibt es auch eine Methode, wie man nur die jetzige Session auf die Darstellung von ME bringen kann, aber das wäre nun wirklich "Warum einfach, wenn es kompliziert geht?".

    Und du nennst es "manipulieren", was ziemlich hoch gegriffen ist. Ich kenne mich mit der RegEdit nicht aus und Windows hatte sicher auch nie geplant, dass wir uns dort begünstigen, jedoch ist es auch nicht verboten und sicher ist es auch, solange du dort nicht irgendeinen Schwachsinn machst. In deiner RegEdit wird täglich etwas geändert usw. Desto mehr Programme du hast, desto mehr Einträge findest du auch in dem Pfad(HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION).

    Ich kann deine Angst aber verstehen. Falls du mehr Informationen haben möchtest, dann frag ruhig. Dafür bin ich und das Forum da. Nimm aber bitte jegliche Informationen nicht als 100%tige Gewehr, anlügen würde ich dich freiwillig aber auch nicht. Ich habe mich lange, lange mit dem WebBrowser beschäftigt und kann sagen, dass dies eine Stressfreie Lösung ist.
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sekki“ ()

    ftzdOp schrieb:

    Sekki schrieb:

    - Du kannst dort auch einen DWORD mit deinem Programm erstellen, dann müssen z.B Menschen mit denen du das Programm teilst, nicht manuell in die RegEdit.


    Via Google habe ich dafür eine vorgefertigte Klasse gefunden. Sie setzt automatisch die vorhandene IE Version für das Programm in der Registry und entfernt diesen Eintrag beim beenden des Programms.

    VB.NET-Quellcode

    1. ​Namespace My
    2. Partial Friend Class MyApplication
    3. Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
    4. CreateBrowserKey()
    5. End Sub
    6. Private Sub MyApplication_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
    7. ' I don't like applications that defecate in the registry and then don't cleanup their own mess
    8. ' so remove the key
    9. RemoveBrowerKey()
    10. End Sub
    11. Private Const BrowserKeyPath As String = "\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION"
    12. Private Sub CreateBrowserKey(Optional ByVal IgnoreIDocDirective As Boolean = False)
    13. Dim basekey As String = Microsoft.Win32.Registry.CurrentUser.ToString
    14. Dim value As Int32
    15. Dim thisAppsName As String = My.Application.Info.AssemblyName & ".exe"
    16. ' Value reference: http://msdn.microsoft.com/en-us/library/ee330730(v=VS.85).aspx
    17. ' IDOC Reference: http://msdn.microsoft.com/en-us/library/ms535242(v=vs.85).aspx
    18. Select Case (New WebBrowser).Version.Major
    19. Case 8
    20. If IgnoreIDocDirective Then
    21. value = 8888
    22. Else
    23. value = 8000
    24. End If
    25. Case 9
    26. If IgnoreIDocDirective Then
    27. value = 9999
    28. Else
    29. value = 9000
    30. End If
    31. Case 10
    32. If IgnoreIDocDirective Then
    33. value = 10001
    34. Else
    35. value = 10000
    36. End If
    37. Case 11
    38. If IgnoreIDocDirective Then
    39. value = 11001
    40. Else
    41. value = 11000
    42. End If
    43. Case Else
    44. Exit Sub
    45. End Select
    46. Microsoft.Win32.Registry.SetValue(Microsoft.Win32.Registry.CurrentUser.ToString & BrowserKeyPath,
    47. Process.GetCurrentProcess.ProcessName & ".exe",
    48. value,
    49. Microsoft.Win32.RegistryValueKind.DWord)
    50. End Sub
    51. Private Sub RemoveBrowerKey()
    52. Dim key As Microsoft.Win32.RegistryKey
    53. key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(BrowserKeyPath.Substring(1), True)
    54. key.DeleteValue(Process.GetCurrentProcess.ProcessName & ".exe", False)
    55. End Sub
    56. End Class 'MyApplication
    57. End Namespace


    Ich habe mir auch mal die Mühe gemacht diese Klasse auf C# anzupassen, dort müssen die jeweiligen Events aber vom Programm noch selbst aufgerufen werden.

    C#-Quellcode

    1. ​public class IEChanger
    2. {
    3. private const string BrowserKeyPath = @"\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION";
    4. string thisAppsname = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
    5. /// <summary>
    6. /// Sets the Registrykey to emulate the latest version of Internet Explorer for Sownloader.exe
    7. /// </summary>
    8. /// <param name="IgnoreIDocDirective"></param>
    9. public void CreateBrowserKey(Boolean IgnoreIDocDirective = false)
    10. {
    11. string basekey = Microsoft.Win32.Registry.CurrentUser.ToString();
    12. int BrowserVer, value;
    13. // get the installed IE version
    14. using (WebBrowser Wb = new WebBrowser())
    15. BrowserVer = Wb.Version.Major;
    16. // set the appropriate IE version
    17. if (BrowserVer >= 11)
    18. value = 11001;
    19. else if (BrowserVer == 10)
    20. value = 10001;
    21. else if (BrowserVer == 9)
    22. value = 9999;
    23. else if (BrowserVer == 8)
    24. value = 8888;
    25. else
    26. value = 7000;
    27. Microsoft.Win32.Registry.SetValue(Microsoft.Win32.Registry.CurrentUser.ToString() + BrowserKeyPath,
    28. thisAppsname + ".exe",
    29. value,
    30. Microsoft.Win32.RegistryValueKind.DWord);
    31. }
    32. /// <summary>
    33. /// Removes the registrykey to keep the registry clean.
    34. /// </summary>
    35. public void RemoveBrowserKey()
    36. {
    37. RegistryKey key;
    38. key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(BrowserKeyPath.Substring(1), true);
    39. // key.DeleteValue(thisAppsname + ".exe");
    40. }


    C#-Quellcode

    1. //Create RegistryKey to emulate latest Internet Explorer version
    2. ChangeIE.CreateBrowserKey();


    C#-Quellcode

    1. //Remove RegistryKey to keep the Registry clean
    2. ChangeIE.RemoveBrowserKey();


    LG Marvin