CefSharp: Fremdcode-Nutzung führt zu Problemen

  • VB.NET

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

    CefSharp: Fremdcode-Nutzung führt zu Problemen

    ausgelagert aus CefSharp Cookies speichern ~VaporiZed

    Hallo Ich habe ein Problem und zwar bekomm ich den Fehler bei:

    VB.NET-Quellcode

    1. CefSharp.Cef.Initialize(settings)

    Fehlermeldung:
    System.Exception: "CEF can only be initialized once per process. This is a limitation of the underlying CEF/Chromium framework. You can change many (not all) settings at runtime through RequestContext.SetPreference. See github.com/cefsharp/CefSharp/w…context-browser-isolation Use Cef.IsInitialized to guard against this exception. If you are seeing this unexpectedly then you are likely calling Cef.Initialize after you've created an instance of ChromiumWebBrowser, it must be before the first instance is created."


    Ich habe den Code von xChRoNiKx benutzt.

    Kann mir jemand sagen woran es liegen könnte, habe auch schon mein path von Debug Ordner getestet aber selber Fehler..

    Mein Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports CefSharp
    2. Imports CefSharp.WinForms
    3. Public Class Form1
    4. Private WithEvents browser As ChromiumWebBrowser
    5. Private _cachePath As String = IO.Path.Combine(Environment.CurrentDirectory, "cache")
    6. Public Sub New()
    7. InitializeComponent()
    8. End Sub
    9. Private Sub SurroundingSub()
    10. Dim settings As CefSettings = New CefSettings()
    11. Dim path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    12. settings.RemoteDebuggingPort = 8080
    13. settings.CachePath = path
    14. Cef.Initialize(settings)
    15. ChromiumWebBrowser1.Controls.Add(browser)
    16. End Sub
    17. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    18. Dim settings As New CefSettings()
    19. If Not IO.Directory.Exists(_cachePath) Then IO.Directory.CreateDirectory(_cachePath)
    20. settings.PersistSessionCookies = True
    21. settings.CachePath = _cachePath
    22. CefSharp.Cef.Initialize(settings)
    23. browser = New ChromiumWebBrowser("https://google.de") With {.Dock = DockStyle.Fill}
    24. ChromiumWebBrowser1.Controls.Add(browser)
    25. End Sub
    26. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
    27. CefSharp.Cef.Shutdown()
    28. End Sub
    29. End Class

    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    getsha schrieb:

    Ich habe den Code von xChRoNiKx benutzt.
    Und dann in einer Art und Weise verändert, dass Murks dabei rauskommt. Du haust Dir einen ChromiumWebBrowser auf's Form und versuchst dann einen weiteren in den bestehenden reinzudrücken mit:

    VB.NET-Quellcode

    1. browser = New ChromiumWebBrowser("https://google.de") With {.Dock = DockStyle.Fill}
    2. ChromiumWebBrowser1.Controls.Add(browser)

    xChRoNiKx arbeitet ohne auf's Form gezogenen ChromiumWebBrowser. Wenn Du das so machst wie er, dann klappt das auch.
    Wird daran liegen, dass wohl im Hintergrund bei Deiner auf's-Form-zieh-Variante, die Methode Cef.Initialize aufgerufen wird (auch wenn sie nicht zu finden ist). Und dann nochmal in Deinem Code -> Crash.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Ja ich kenn dass nicht anders das dass auch ohne Panel geht?! was weiß ich da der normale kack Browser in vb nicht alles darstellen tut weil er gefühlt von 1970 ist muss man ja so Umwege machen... ja was muss ich jetzt in mein Code verändern damit er die Cookies speichert? (..)
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur

    getsha schrieb:

    ich kenn dass nicht anders das dass auch ohne Panel geht
    ?( Aber Du machst es doch selbst ohne Panel. Von daher versteh ich Deine Aussage nicht. Der Code von @xChRoNiKx hat doch schon die Einstellung, dass Cookies gespeichert werden.: settings.PersistSessionCookies = True. Was hat Dir denn an dem Code nicht gepasst?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Weil der ganze Code mir ein fehler ausgibt, bei diesem hier:

    VB.NET-Quellcode

    1. ​CefSharp.Cef.Initialize(settings)

    und er speichert keine Cookies, wenn ich mich irgendwo anmelde und das Programm neu starte bin ich wieder abgemeldet..
    Das ist mein Problem wo ich nicht weiter komme..
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur
    Den Code von @xChRoNiKx hab ich probiert, der läuft fehlerfrei durch. Das mit den Cookies hab ich nicht probiert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich kann wenn ich meinen Code nutze auch nicht sehen das der nicht geht.

    Hast du NUR den Code benutzt oder hast du den Browser noch aufs Form gezogen?
    Du darfst das ding nicht auf die Form ziehen und den Code so benutzen aber ich sehe hier nicht was du auf der Form gemacht hast leider.

    Daher wäre es am besten wenn du mal eine bereinigte Projektmappe hochlädst damit wir das mal nach prüfen können.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    @VaporiZed Okee, und bei ihnen kommt kein fehler bzw ich muss es ausgrauen(grün makieren) bevor ich es erst debugen kann.
    @xChRoNiKx Habe dein Code 1zu1 so angewendet,
    Projektmappe:
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur
    Ich hab ein leeres .NET-Framework-Projekt, hab mir über nuget CefSharp reingezimmert und den genannten Code verwendet. Sonst nix. Klappt.

    Projektmappen und Bilder solltest Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten. Nicht wenige (Power)User hier klicken ungern auf FremdHosterLinks und stellen stattdessen die Hilfe hier im Thread ein bzw. fangen gar nicht erst mit Hilfe an. Deine Entscheidung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Du hast in deinem Projekt den ChromiumWebbrowser als Control aufs Form gezogen das darfst du nicht.
    Mach ein Panel und schmeiß den Webbrowser per Code in das Panel wie in meinem Code das Panel ist in dem Sinne einfach dein Platzhalter für den Browser auf der Form.
    Dieses Panel kannst du ja dann auch auf Dock Fill stellen damit es über die ganze Form geht.
    Sobald ich das so mache funktioniert das ganze Problemlos da ja dann nur noch einmal das Initialize ausgeführt wird.
    Du kannst auch das Panel weglassen und den browser direkt mit Dock-Fill auf die Form setzen wenn du unbedingt das Panel nicht haben willst.

    Diese Lösung wurde dir schon direkt im 2. Post gegeben und du hast es nicht umgesetzt.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Ah ok also war es mein Fehler, ich hatte statt "Panel1" - "ChromiumWebBrowser" draufgezogen gehabt. Mit Panel1 geht es jetzt ohne Probleme.
    Nice Ich hab zu Danken.
    @xChRoNiKx
    @VaporiZed
    Public Signatur

    Dim Mfg As Mit freundlichen grüßen
    Dim Getsha As User.Getsha

    Mfg.Getsha()

    End Signatur