IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Intégrer le navigateur Chromium (Chrome) dans une fenêtre Windev avec CefSharp


Sujet :

Contribuez

  1. #101
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 32
    Points
    32
    Par défaut
    Tu n'as pas suivit le point 4 de la méthodologie : "Extraire les MSI avec Uniextract"
    II faut utiliser Uniextract sur le msi, et pas extraire/dézippé directement le .cab !

    Voilà le package en X64

  2. #102
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par ochoteau Voir le message
    Tu n'as pas suivit le point 4 de la méthodologie : "Extraire les MSI avec Uniextract"
    II faut utiliser Uniextract sur le msi, et pas extraire/dézippé directement le .cab !

    Voilà le package en X64
    Tout d'abord MERCI pour ce second package, tu me sauves.

    Mais je t'assure que j'ai bien suivi ta procédure (enfin probablement mal). J'ai utilsé Uniextract sur les .msi. Qui d'ailleurs propose deux modes d'extraction différents plus un fonction d'exécution. Chez moi cela ne me donnait qu'un fichier binaire. C'est pourquoi j'ai ensuite essayé d'extraire avec ce même outil directement les fichier cab, ce qui donnait des fichiers sans l'extension dll.
    Par contre je n'ai pas utilisé l'uniextract de ton lien car Firefox m'en à interdit l’accès disant que le site était malveillant. Je suis allé le chercher sur un autre site. Peut être était ce une autre version.

    Dans le doute, je vais mettre l'intégralité du contenu de tes packs dans le répertoire de l'exécutable (32 ou 64 bits selon bien sur), car je n'ai pas bien compris si on pouvait se contenter de mettre uniquement les dll de laversion 2013 pour que ça fonctionne chez tout le monde.

    Crdlt
    Franck

  3. #103
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Ochoteau, je dois passer à coté de quelque chose : j'ai installé hier mon appli sur un Windows 7 64 bits, avec toutes les dll de ton pack 64 dans le même dossier que l'appli. Au lancement, joli crash me disant que soit le .net soit le redistrbuable C++ 2010 est manquant.
    Sur le poste, était déjà installé .Net 3, j'ai installé en plus .Net 4, cela ne change rien.
    J'ai donc installé le redistribuable C++ 2010 et la ça fonctionne.

    Donc soit les dll du C++ placées dans le dossier de l'exécutable ne sont pas prises en compte. Soit cela suffit pas .

    Si elles ne sont pas prises en compte : que faut il faire en plus ?, faut il les ajouter dans la liste des éléments du projet, sous windev ?

    Si elles ne suffisent pas : que manque t'il en plus des dlls ?

    Crdlt
    Franck

  4. #104
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par bugnet Voir le message
    Bonjour,

    Ochoteau, je dois passer à coté de quelque chose : j'ai installé hier mon appli sur un Windows 7 64 bits, avec toutes les dll de ton pack 64 dans le même dossier que l'appli. Au lancement, joli crash me disant que soit le .net soit le redistrbuable C++ 2010 est manquant.
    Sur le poste, était déjà installé .Net 3, j'ai installé en plus .Net 4, cela ne change rien.
    J'ai donc installé le redistribuable C++ 2010 et la ça fonctionne.

    Donc soit les dll du C++ placées dans le dossier de l'exécutable ne sont pas prises en compte. Soit cela suffit pas .

    Si elles ne sont pas prises en compte : que faut il faire en plus ?, faut il les ajouter dans la liste des éléments du projet, sous windev ?

    Si elles ne suffisent pas : que manque t'il en plus des dlls ?

    Crdlt
    Franck
    Honnêtement je n'ai jamais testé en x64, les seuls DLLs à mettre dans Windev sont celles de Cefsharp (en x64) et Windev configuré pour compilé en x64 (utiliser les DLL Dotnet x64).
    Si cela ne fonctionne pas il manque certainement une DLL ou les mauvaises DLLs sont appelées (x32).
    Mais je ne peux pas plus t'aider sur le sujet

  5. #105
    Membre actif
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Points : 205
    Points
    205
    Par défaut Erreur de chargement de CefSharp.Core.dll et variable d'environnement PATH
    Petit retour d'expérience au sujet des redistribuables et des erreurs d’interfaçage Cef / Windev.

    Sur certains postes, malgré l'installation des redistribuables 2010 et 2013, j'avais toujours des erreurs du type de celle ci :

    Appel WL :

    Traitement de 'xxx, ligne 8, thread 0



    Que s'est-il passé ?

    Echec lors de la lecture de la propriété <Cef> du type <(static)>

    L'objet de type <CefSharp.Cef> (assemblage <D:\Projet\Exe\CefSharp.Core.dll>) n'a pas pu être créé

    L'assemblage <C:\CefSharp.Core.dll> n'a pas pu être ouvert

    Le framework .NET a renvoyé l'erreur suivante :

    Impossible de charger le fichier ou l'assembly 'CefSharp.Core.dll' ou une de ses dépendances. Le module spécifié est introuvable.

    L'assemblage <CefSharp.Core> n'a pas pu être ouvert



    Code erreur : 200007

    Niveau : erreur fatale



    Dump de l'erreur du module 'wd210net4.dll' (21.0.10.0).

    Identifiant des informations détaillées (.err) : 200007

    Informations de débogage :

    System.IO.FileNotFoundException: Impossible de charger le fichier ou l'assembly 'CefSharp.Core.dll' ou une de ses dépendances. Le module spécifié est introuvable.

    Nom de fichier : 'CefSharp.Core.dll'

    à System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

    à System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

    à System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)

    à System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)

    à System.Reflection.Assembly.LoadFrom(String assemblyFile)

    à CDotNetLoader.__pclLoadAssembly(CDotNetLoader* , Char* pszFileName, CXError* pclErreur)
    Le problème a été résolu en faisant pointer la variable d'environnement PATH vers le répertoire contenant les dlls de Cef (soit le répertoire de mon exécutable).
    Du coup, je modifie si nécessaire le path à chaque lancement de mon programme avec l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    sPATH est une chaîne
    sPATH = SysEnvironnement("PATH")
    sPATH = Remplace(sPATH,"PATH=","",SansCasse)
    SI Position(sPATH,fRepExe(),1,SansCasse) = 0 ALORS
    	SI sPATH[[Taille(sPATH)]] <> ";"  ALORS
    		sPATH += ";"
    	FIN
    	sPATH += fRepExe()
    	SI PAS SysChangeEnvironnement("PATH",sPATH,sysEnvGlobal) ALORS
    		Erreur(ErreurInfo(errComplet))
    	FIN
    FIN
    Bonne prog

  6. #106
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Merci pour ce retour d'expérience.

    De mon coté, pour une appli distribuée assez largement et donc installée sur toutes sortes de machines, j'ai pas mal de retours de bugs (10-20% des cas). Parmi les plus courants :

    Sous W7-64, plantage de .Net au lancement. Souvent résolu en faisant installer la version 4.6.2 de .Net

    Sous W7-32, Erreur du style "Le champ DotNet n'a pu être créé. L'erreur rencontrée lors de la création du champ est :
    La fonction 'SetParent' de la DLL 'user32' a provoqué une erreur d'exécution. Dans ce cas de figure assez rares heureusement, j'ai souvent été contraint de demander au client d'installer le soft sur une autre machine (W10)

    Sous W10-64, plantage des dlls au lancement, souvent résolu en faisant installer la version 2010 des redistribuable C++. Mon appli installe juste la version 2013 à ce jour et je vais sans doute ajouter le 2010 en plus pour anticiper ce genre de problème.

    Il arrive aussi parfois que quoique que je fasse, l'appli crashe au lancement sous W10-64 (message générique Windows, l'"appli a cessé de fonctionner") sans que j'arrive à déterminer si c'est du à .Net, VC++ ou les dlls. J'ai beau installer diverses version de .Net et de VC++, je dois souvent me résoudre à installer dans ce cas la version 32 bits de mon appli et ça fonctionne.

    J'ai encore un autre cas, rencontré une seule fois et que je n'ai pas réussi à résoudre, ou le dotnet et le chromium se lance bien, sans erreur, mais ou le CKEditor que j'ouvre dedans ne s'affiche pas. PAs de message d'erreur. La c'est plus mystérieux donc.

    Par contre, je n'ai pas souvenir d'avoir rencontré le cas que tu décris dans le dernier post ci dessus.

    Donc globalement pour l'instant il me manque une vision claire, pour toutes les versions de Windows, de quelle version de .Net et de VC++ on a besoin pour garantir un fonctionnement a tous les coups. J'y vais à chaque fois à taton et parfois n'arrive pas à faire fonctionner l'appli (environ 5% des cas, ça reste trop élevé) .

    Crdlt
    Franck

  7. #107
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous et merci pour ce tuto et toutes les informations très précieuse concernant l'intégration de CefSharp dans Windev.

    J'ai intégré la version 47 de CefSharp avec la bibliotheque _3po (javascript) très pratique.

    Cependant, lors de nos différents test, nous avons eu des pb d'impression (décalage d'impression page après page) dans la version 47.

    Ceci est reproduit sous navigateur Chromium 47 mais pas sous Chromium 53/55

    J'ai donc passé CefSharp dans Windev en version 53.0.1 mais malheureusement la dll _3po ne le prend pas

    lemazol > vous serait-il possible de me recompiler votre fichier _3po.dll pour CefSharp 53.0.1 ? (ou bien si c'est possible mais j'en doute, que ça ne regarde pas le versionning ?)

    Pour info j'obtiens cette erreur lors de l'appel : chromiumJavascript = allouer un Javascript(chromiumNavigateur)
    Le framework .NET a renvoyé l'erreur suivante :
    Impossible de charger le fichier ou l'assembly 'CefSharp.WinForms, Version=47.0.4.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138' ou une de ses dépendances. Le fichier spécifié est introuvable.

    Cordialement

  8. #108
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Bien le bonjour,

    Je relance un peu le sujet


    J'ai réussi à intégré le navigateur dans une fenêtre Windev (version 16), c'est cool.

    Mon 1er soucis est que je voudrais désactiver le menu contextuel quand on clique droit.

    J'ai trouvé ceci qui m'a un peu aiguillé mais je n'arrive pas à le faire dans Windev (je suis un peu un noob du .NET donc bon -_- )

    https://github.com/cefsharp/CefSharp/issues/107
    https://github.com/cefsharp/CefSharp...MenuHandler.cs


    Si quelqu'un aurait la gentillesse de m'aider, ce serait top
    Je suis certain que ce sera fait en une petite ligne, mais la syntaxe me rend confus :/

  9. #109
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 36
    Points : 44
    Points
    44
    Par défaut Package pour Windev 23
    Bonjour,

    Lemazol, Ochoteau,... et vous tous qui m'aviez aidé à utiliser ce package il y a deux ans déjà, je reviens vers vous car je m'apprêtais à acheter la mise à jour WD 23 (je suis encore en WD 20) pour faire évoluer un peu mes applications, lorsque j'ai réalisé que je ne dois le faire que si je vais pouvoir continuer à utiliser ces .net et Chrome.
    L'un de vous m'avais fourni les fichiers pour la version 20 et je crois me souvenir qu'il en utilisait d'autres pour la 21. Existent il en version compatible WD 23 ?

    Merci d'avance.
    Crdlt
    Franck

  10. #110
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 19
    Points : 32
    Points
    32
    Par défaut
    @bugnet

    Ce sont des DLL/Assemblages DOTNET, ils fonctionnent avec WD20/21 (et 22 dont je viens de passer dessus) et il n'y donc pas de raison que cela ne fonctionne pas sous WD23 !
    Pour le moment je travaille tjs avec les veilles versions (chrome 39) car limité au DOTNET 4.0, tu trouveras sur NUGET (chrome 57) les nouvelles versions mais sur du DOTNET 4.5 !

  11. #111
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Le projet 3PO Démo Chromium ne fonctionne plus depuis la nouvelle version 75n de WinDev 24
    Bonjour,

    Le projet 3PO Démo Chromium ne fonctionne plus depuis la nouvelle version 75n de WinDev 24

    Voici le message d'erreur au lancement de l'application :

    L'autodiagnostic des threads a détecté un comportement interne inattendu.

    **********************************************

    ----- Informations techniques -----

    Que s'est-il passé ?
    L'autodiagnostic des threads a détecté un comportement interne inattendu.

    Code erreur : 2947
    Niveau : erreur fatale

    Dump de l'erreur du module 'wd240vm.dll' (24.0.478.3).
    Identifiant des informations détaillées (.err) : 2947
    Informations de débogage :
    UEL = 272
    Erreur hors execution

    Est-dû à un bug de WinDev 24 75n ?

    Constatez-vous le même problème ?

    Merci.

  12. #112
    Nouveau Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mars 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Petite question fonctions retour winform
    Bonjour et merci pour votre tuto il es bien expliqué et il marche très bien, merci encore.
    j'ai juste une question comment ajouter la fonction Back et Forward dans le projet CefSharp et la dll windev, on trouve bien les fonctions load, refresh, etc.. mais pas Back et Foward.

    Cordialement

    Amine Ben.

    Citation Envoyé par bastiencb Voir le message
    Bonjour,

    Voici un petit tutorial expliquant comment intégrer le navigateur Chromium (Chrome) directement dans les fenêtres Windev, en lieu et place d'Internet Explorer et de l'activeX Shell.Explorer.
    Cela est rendu possible par l'utilisation de la librairie CefSharp (pour Chromium Embedded Framework) (https://github.com/cefsharp/CefSharp) et d'un champ Windev de type .NET 2.0 (WinForm).
    Les possibilités sont nombreuses et je ne présente donc ici que les fonctionnalités de base.

    1/Fichiers nécessaires

    Les sources pour Chromium en version 45 sont disponibles ici : https://mon-partage.fr/f/W22nIf8c/.
    Il faut copier tous les éléments dans le répertoire de votre exécutable, et dans le répertoire "Exe" de votre projet Windev pour le mode test.

    La dll WindevNet a été compilée par moi même pour permettre la récupération du résultat d'appels Javascript.

    Les autres dlls sont issues d'un projet Visual Studio (Community) de test de CefSharp, compilé avec la dernière version des packages disponibles.
    Des explications simples pour tester CefSharp avec Visual Studio sont disponibles ici : http://www.codeproject.com/Articles/...using-CefSharp.

    2/Intégration dans Windev

    Dans Windev, cliquez sur le menu Atelier/.NET/Utiliser un assemblage .NET dans votre projet.
    Dans la fenêtre listant les assemblages disponibles, cliquez sur le bouton "Parcourir" et sélectionnez les dlls "CefSharp.Core.dll", "CefSharp.WinForms.dll", "WDNetHelpers.dll" et "WindevNet.dll", présentes dans le répertoire "Exe" de votre projet.

    Dans la liste des assemblages, sélectionnez aussi l'assemblage "System.Windows.Forms".

    Cliquez sur le bouton de validation pour importer les dlls dans votre projet.

    2.1/Ajout du champ .NET 2.0 pour affichage du navigateur

    Insérez sur votre fenêtre Windev un champ .NET 2.0 (WinForm)
    Dans la description du champ, onglet "Général", sélectionnez la classe "System.Windows.Forms.Panel".

    2.2/Code d'initialisation de la fenêtre

    Dans le traitement d'initialisation de la fenêtre qui contient le champ .NET 2.0, ajoutez le code suivant, qui va permettre d'initialiser Cef et d'intercepter les événements du navigateur dans des procédures Windev.
    La liste des événements gérés n'est pas exhaustive, mais j'ai souhaité dans un premier temps mettre en place l'interception de ceux qui me paraissaient les plus importants.

    L'objet oWDJavascript va permettre d'intercepter l'événement de fin d'exécution asynchrone d'un code Javascript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SI PAS Cef.IsInitialized ALORS
    	Cef.Initialize()
    FIN
    
    goBrowser est un ChromiumWebBrowser("http://google.com")
    
    goBrowser.add_AddressChanged(DotNetDélégué(AdressChanged,"EventHandler<CefSharp.AddressChangedEventArgs>"))
    goBrowser.add_ConsoleMessage(DotNetDélégué(ConsoleMessage,"EventHandler<CefSharp.ConsoleMessageEventArgs>"))
    goBrowser.add_IsBrowserInitializedChanged(DotNetDélégué(IsBrowserInitializedChanged,"EventHandler<CefSharp.IsBrowserInitializedChangedEventArgs>"))
    goBrowser.add_FrameLoadStart(DotNetDélégué(FrameLoadStart,"EventHandler<CefSharp.FrameLoadStartEventArgs>"))
    goBrowser.add_FrameLoadEnd(DotNetDélégué(FrameLoadEnd,"EventHandler<CefSharp.FrameLoadEndEventArgs>"))
    goBrowser.add_LoadError(DotNetDélégué(LoadError,"EventHandler<CefSharp.LoadErrorEventArgs>"))
    goBrowser.add_LoadingStateChanged(DotNetDélégué(LoadingStateChanged,"EventHandler<CefSharp.LoadingStateChangedEventArgs>"))
    goBrowser.add_StatusMessage(DotNetDélégué(StatusMessage,"EventHandler<CefSharp.StatusMessageEventArgs>"))
    goBrowser.add_TitleChanged(DotNetDélégué(TitleChanged,"EventHandler<CefSharp.TitleChangedEventArgs>"))
    
    oWDJavascript est un WindevNet.WDJavascript
    oWDJavascript:add_EvaluateJsDone(DotNetDélégué(EvaluateJsDone,"EventHandler<EvaluateJsDoneEventArgs>"))
    
    CAS EXCEPTION:
    	Erreur(ExceptionInfo(errComplet))
    2.3/Procédures de gestion des événements

    Dans la fenêtre Windev, il faut maintenant créer les procédures correspondantes à celles déclarées dans la fonction DotNetDélégué() de l'étape 2.2 soit :

    AdressChanged
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE AdressChanged(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.AddressChangedEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
    ConsoleMessage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    PROCEDURE ConsoleMessage(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.ConsoleMessageEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
    Trace(_oArgs.Line+" : "+_oArgs.Message)
    IsBrowserInitializedChanged
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE IsBrowserInitializedChanged(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.IsBrowserInitializedChangedEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
    FrameLoadStart
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE FrameLoadStart(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.FrameLoadStartEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
    FrameLoadEnd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    PROCEDURE FrameLoadEnd(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.FrameLoadEndEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
     
    bMainFrame est un booléen
    bMainFrame = _oArgs.Frame.IsMain
    SI bMainFrame ALORS
    	Trace("#############################")
    FIN
    Trace("Main Frame ? : "+bMainFrame)
    Trace("Frame Url ? : "+_oArgs.Url)
    LoadError
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE LoadError(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.LoadErrorEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
    LoadingStateChanged
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    PROCEDURE LoadingStateChanged(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.LoadingStateChangedEventArgs <utile>)
     
    //https://github.com/cefsharp/CefSharp/blob/master/CefSharp/LoadingStateChangedEventArgs.cs
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
     
    bIsLoading est un booléen
    bIsLoading = _oArgs.get_IsLoading()
    Trace("Loading : "+bIsLoading)
    StatusMessage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE StatusMessage(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.StatusMessageEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
    TitleChanged
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROCEDURE TitleChanged(_oBrowser est un ChromiumWebBrowser,_oArgs est CefSharp.TitleChangedEventArgs <utile>)
     
    Trace("------------------------------")
    Trace(dbgInfo(dbgTraitement))
    Trace(_oBrowser:get_Address())
    EvaluateJsDone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE EvaluateJsDone(_oWDJavascript est un WindevNet.WDJavascript <utile>,_oArgs est WindevNet.EvaluateJsDoneEventArgs)    
     
    Info(_oArgs.sResult)
    2.4/Fin d'initialisation de la fenêtre

    Dans le traitement de fin d'initialisation, copier le code suivant (WinForm1 est le nom du champ .NET 2.0) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    goBrowser.Dock = DockStyle.Fill
    //WinForm1 est le nom du champ .NET 2.0
    WDHelpers.AddControlToControlCollection(goBrowser,WinForm1.Controls)
    MaFenêtre..Titre += " : "+Cef.ChromiumVersion +"-"+ Cef.CefVersion+"-"+Cef.CefSharpVersion
    2.5/Fermeture de la fenêtre

    Cef.Shutdown()

    3/Fonctions diverses

    Charger une URL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    goBrowser.Load("http://google.com")
    Il est aussi possible d'accéder au DOM des documents et de le modifier à l'aide d'appels Javascript.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    sJavascript est une chaîne = [
    	document.forms["%1"].submit();
    ]
    sFormNom est une chaîne
    sFormNom = "myform"
    sJavascript = ChaîneConstruit(sJavascript,sFormNom)
     
    WebBrowserExtensions.ExecuteScriptAsync(goBrowser,sJavascript)
    Récupérer le résultat d'une fonction Javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    sJavascript est une chaîne
    sVal est une chaîne
     
    //Récupérer le contenu de la balise 'html' du document
    sJavascript = [
    document.getElementsByTagName('html')[0].innerHTML;
    ]
    EvaluateJsAsync(goBrowser,sJavascript)
    //La procédure Windev de gestion d'événement "EvaluateJsDone" est déclenchée lorsque le résultat est prêt.
     
    //Récupérer le contenu de tous les formulaires du document
    sJavascript = [
    (function() { 
    var elements = document.getElementsByTagName('form'); 
    var elementsList = ''; 
    for (var i = 0; i < elements.length; i++) { 
    	var element = elements[i]; 
    	elementsList += element.innerHTML; 
    	if (i < elements.length-1) 
    	{ 
    		elementsList += '<RC>'; 
    	} 
    } 
    return elementsList; })();
    ]
    EvaluateJsAsync(goBrowser,sJavascript)
    //La procédure Windev de gestion d'événement "EvaluateJsDone" est déclenchée lorsque le résultat est prêt.
    La procédure Windev "EvaluateJsAsync" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PROCEDURE EvaluateJsAsync(_oBrowser est un ChromiumWebBrowser, LOCAL _sJavascript est une chaîne)
     
    oFrame est CefFrameWrapper dynamique <- WebBrowserExtensions.GetMainFrame(_oBrowser)
    oWDJavascript:EvaluateJsAsync(oFrame,_sJavascript,0)
    La procédure Windev "EvaluateJsDone" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PROCEDURE EvaluateJsDone(_oWDJavascript est un WindevNet.WDJavascript <utile>,_oArgs est WindevNet.EvaluateJsDoneEventArgs)                         
     
    Info(_oArgs.sResult)
    Code C# de la dll WindevNet :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    using CefSharp;
    using System;
    using System.Threading.Tasks;
     
    namespace WindevNet
    {
        public class EvaluateJsDoneEventArgs : EventArgs
        {
            public int iID { get; set; }
            public string sResult { get; set; }
            public Task<JavascriptResponse> JavascriptResponse;
        }
     
        public class WDJavascript
        {
     
            public event EventHandler<EvaluateJsDoneEventArgs> EvaluateJsDone;
     
            protected virtual void OnEvaluateJsDone(EvaluateJsDoneEventArgs e)
            {
                EventHandler<EvaluateJsDoneEventArgs> handler = EvaluateJsDone;
                if (handler != null)
                {
                    handler(this, e);
                }
            }
     
            public void EvaluateJsAsync(IFrame f, string sJavascript,int iID=0)
            {
                f.EvaluateScriptAsync(sJavascript).ContinueWith(t =>
                {
                    var Response = t.Result;
                    EvaluateJsDoneEventArgs args = new EvaluateJsDoneEventArgs();
                    args.iID = iID;
                    args.sResult = (string)Response.Result.ToString();
                    args.JavascriptResponse = t;
                    OnEvaluateJsDone(args);
                });
            }
     
        }
     
    }

    Code C# de test de CefSharp :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    using System;
    using System.Windows.Forms;
    using CefSharp;
    using CefSharp.WinForms;
     
    namespace CefTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                InitBrowser();
            }
     
            public ChromiumWebBrowser browser;
     
            public void InitBrowser()
            {
                Cef.Initialize(new CefSettings());
                browser = new ChromiumWebBrowser("www.google.com");
     
                browser.IsBrowserInitializedChanged -= new EventHandler<CefSharp.IsBrowserInitializedChangedEventArgs>(IsBrowserInitialized);
                browser.IsBrowserInitializedChanged += new EventHandler<CefSharp.IsBrowserInitializedChangedEventArgs>(IsBrowserInitialized);
     
                browser.FrameLoadEnd -= new EventHandler<CefSharp.FrameLoadEndEventArgs>(FrameLoadEnd);
                browser.FrameLoadEnd += new EventHandler<CefSharp.FrameLoadEndEventArgs>(FrameLoadEnd);
     
                browser.ConsoleMessage -= new EventHandler<CefSharp.ConsoleMessageEventArgs>(ConsoleMessage);
                browser.ConsoleMessage += new EventHandler<CefSharp.ConsoleMessageEventArgs>(ConsoleMessage);
     
                this.Controls.Add(browser);
                browser.Dock = DockStyle.Fill;
            }
     
            private void IsBrowserInitialized(object sender, IsBrowserInitializedChangedEventArgs e)
            {
                if (e.IsBrowserInitialized)
                {
                    //Do something here
                }
            }
     
            public string EvaluateJsResponse;
     
            public void EvaluateJs(IFrame f, string Js)
            {
                f.EvaluateScriptAsync(Js).ContinueWith(x =>
                {
                    var response = x.Result;
                    if (response.Success && response.Result != null)
                    {
                        EvaluateJsResponse = (string)response.Result.ToString();
                        //Do something here (To interact with the UI you must call BeginInvoke)
                    }
                });
            }
     
            public void FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
            {
                if (e.Frame.IsMain)
                {
                    //string sJs = "document.getElementsByTagName('html')[0].innerHTML;";
                    string sJs = "(function() { var body = document.body, html = document.documentElement; return  Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight ); })();";
                    EvaluateJs(e.Frame, sJs);
                }
            }
     
            public void ConsoleMessage(object sender, ConsoleMessageEventArgs e)
            {
                Console.WriteLine(e.Message);
            }
     
        }
    }

    En cas de problèmes d'intégration dans Windev, la solution peut être souvent de supprimer le répertoire .NET de votre projet, de vider son répertoire de compilation <NomProjet>.cpl et de recompiler le projet.

    Merci aux intervenants de ce fil : http://www.developpez.net/forums/d14...cation-windev/ et à ochoteau en particulier pour les sources.

    Bonne prog

  13. #113
    Futur Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2015
    Messages : 28
    Points : 7
    Points
    7
    Par défaut Flash dans Chromium
    Bonjour,

    Tout d'abord merci pour ce fil et vos contributions. Même si le sujet date un peu maintenant, j'aimerais rouvrir la discussion.

    En effet, si le navigateur fonctionne dans la plupart des cas, il m'est impossible d'afficher du streaming vidéo. Flash fonctionne bien quant à lui. Avez-vous déjà rencontré ce problème et si oui avez-vous trouvé une solution?

    Merci pour votre aide.

    Cordialement,

    Laurence.

  14. #114
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut super appli
    Bonjour, j'ai implanté CefSharp dans une fenêtre de mon appli, ça fonctionne impec.
    Me fallait un navigateur web et le champ HTML de windev (suis en version 24) était trop dépassé, il affichée pas les pages web de certain site.
    Par contre j'ai essayé de mettre à jour CefSharp a partir des liens que vous avez donné ici et ça ne fonctionne pas. Je suis en version 51 de chromium .
    Donc y a t il une mise à jour qui fonctionne, car quand je met à jour toutes les dll et fichier, et même en refaisant les Assemblage et le champ .Net et en recompilant
    windev me reconnais plus "Cef.Initialize()" il me dit que les paramètre de "Initialize" sont pas bon.
    Si je lance le "Go" en test de la fenêtre j'ai la fameuse erreur "Dump de l'erreur du module 'wd240net4.dll'".
    Avez vous une solution, car je voudrais bien le mettre à jour au moins en version 7.
    Merci d'avance

  15. #115
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte réseau
    Inscrit en
    Février 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Algérie

    Informations professionnelles :
    Activité : Architecte réseau

    Informations forums :
    Inscription : Février 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par bastiencb Voir le message
    Bonjour Loic,

    Il faut effectivement implémenter l'interface de gestion des téléchargements IDownloadHandler dans le code C#.
    Cf ici : https://github.com/cefsharp/CefSharp...loadHandler.cs

    J'ai modifié la dll WindevNet.dll pour ajouter cette possibilité. A télécharger ici : Pièce jointe 220837.

    Attention, la dll a été compilée avec CefSharp v 51 dispo ici : https://mon-partage.fr/f/G2zk0QXT/

    En Windev, cela fonctionne de cette façon :

    1/Code d'initialisation de la fenêtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SI PAS Cef.IsInitialized ALORS
    	Cef.Initialize()
    FIN
     
    goBrowser est un ChromiumWebBrowser("http://google.com")
     
    oDownloadHandler est un WindevNet.DownloadHandler dynamique
    oDownloadHandler <- allouer un WindevNet.DownloadHandler
    goBrowser.set_DownloadHandler(oDownloadHandler)
     
    //Event_OnDownloadUpdated est une procédure locale à la fenêtre
    oDownloadHandler.add_OnDownloadUpdatedEvent(DotNetDélégué(Event_OnDownloadUpdated,"EventHandler<WindevNet.OnDownloadUpdatedEventArgs>"))
    2/En fin d'initialisation de la fenêtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    goBrowser.Dock = DockStyle.Fill
    //WinForm1 est le nom du champ .NET 2.0
    WDHelpers.AddControlToControlCollection(goBrowser,WinForm1.Controls)
    MaFenêtre..Titre += " : "+Cef.ChromiumVersion +"-"+ Cef.CefVersion+"-"+Cef.CefSharpVersion
    3/Procédure de gestion de l’événement Event_OnDownloadUpdated (procédure locale à la fenêtre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    PROCEDURE Event_OnDownloadUpdated(Src,Args est un OnDownloadUpdatedEventArgs)
    //https://github.com/cefsharp/CefSharp/blob/master/CefSharp/DownloadItem.cs
    sErreur est une chaîne
    SI Src = Null _OU_ Args = Null _OU_ Args.ToString() <> "WindevNet.OnDownloadUpdatedEventArgs" ALORS
    	sErreur = Args.ToString()
    	RENVOYER Void
    FIN
     
    QUAND EXCEPTION DANS
    	iPourcentage est un entier
    	sPath est une chaîne
    	sSuggestedFileName est une chaîne
    	iPourcentage 		= Args.downloadItem.get_PercentComplete()
    	sPath 				= Args.downloadItem.get_FullPath()
    	sSuggestedFileName 	= Args.downloadItem.SuggestedFileName 
     
    	SI Args.downloadItem.IsComplete _OU_ Args.downloadItem.IsCancelled ALORS
    		//Faire quelque chose
    	SINON
    		SI Args.downloadItem.IsInProgress ALORS
    			//Faire quelque chose
    		FIN
    	FIN 
    FAIRE
    	Erreur(sErreur+RC+RC+ExceptionInfo(errComplet))
    FIN
    RENVOYER Void
    Code C# de la dll WindevNet.dll :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
     
    using CefSharp;
    using CefSharp.Internals;
    using CefSharp.WinForms;
    using System;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Net;
    using System.Threading.Tasks;
     
    namespace WindevNet
    {
     
        public class EvaluateJsDoneEventArgs : EventArgs
        {
            public string sID { get; set; }
            public string sResult { get; set; }
            public Task<JavascriptResponse> JavascriptResponse;
        }
     
        public class WDBrowser
        {
            public ChromiumWebBrowser browser;
     
            public ChromiumWebBrowser GetBrowser(string sUrl)
            {
                Cef.Initialize(new CefSettings());
                browser = new ChromiumWebBrowser(sUrl);
                return browser;
            }
     
        }
     
        public class WDJavascript
        {
     
            public event EventHandler<EvaluateJsDoneEventArgs> EvaluateJsDone;
     
            protected virtual void OnEvaluateJsDone(EvaluateJsDoneEventArgs args)
            {
                EventHandler<EvaluateJsDoneEventArgs> handler = EvaluateJsDone;
                if (handler != null && this != null && args != null)
                {
                    try
                    {
                        handler(this, args);
                    }
                    catch (System.Exception e)
                    {
                        e.ToString();
                    }
                }
            }
     
            public void EvaluateJsAsync(IFrame f, string sJavascript,string sID="")
            {
                f.EvaluateScriptAsync(sJavascript).ContinueWith(t =>
                {
                    var Response = t.Result;
                    EvaluateJsDoneEventArgs args = new EvaluateJsDoneEventArgs();
                    args.sID = sID;
                    args.sResult = (string)Response.Result.ToString();
                    args.JavascriptResponse = t;
                    OnEvaluateJsDone(args);
                });
            }
     
     
     
        }
     
        //--------------------------------------------------------------------
        //Implémentation de l'interface de gestions des requêtes
     
        public class OnBeforeBrowseEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public IFrame frame { get; set; }
            public IRequest request { get; set; }
            public bool isRedirect { get; set; }
            public bool bok { get; set; }
        }
        public class OnCertificateErrorEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public CefErrorCode errorCode { get; set; }
            public string requestUrl { get; set; }
            public ISslInfo sslInfo { get; set; }
            public IRequestCallback callback { get; set; }
            public bool bok { get; set; }
        }
        public class OnBeforeResourceLoadEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public IFrame frame { get; set; }
            public IRequest request { get; set; }
            public IRequestCallback callback { get; set; }
            public int iReturn { get; set; }
        }
        public class OnResourceRedirectEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public IFrame frame { get; set; }
            public IRequest request { get; set; }
            public string newUrl { get; set; }
        }
        public class OnResourceResponseEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public IFrame frame { get; set; }
            public IRequest request { get; set; }
            public IResponse response { get; set; }
            public bool bok { get; set; }
        }
        public class OnOpenUrlFromTabArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public IFrame frame { get; set; }
            public string targetUrl { get; set; }
            public WindowOpenDisposition targetDisposition { get; set; }
            public bool userGesture { get; set; }
            public bool bok { get; set; }
        }
        public class OnPluginCrashedEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public string pluginPath { get; set; }
        }
        public class GetAuthCredentialsEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public IFrame frame { get; set; }
            public bool isProxy { get; set; }
            public string host { get; set; }
            public int port { get; set; }
            public string realm { get; set; }
            public string scheme { get; set; }
            public IAuthCallback callback { get; set; }
            public bool bok { get; set; }
        }
        public class OnRenderProcessTerminatedEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public CefTerminationStatus status { get; set; }
        }
        public class OnQuotaRequestEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public string originUrl { get; set; }
            public long newSize { get; set; }
            public IRequestCallback callback { get; set; }
            public bool bok { get; set; }
        }
        public class OnProtocolExecutionEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public string url { get; set; }
            public bool bok { get; set; }
        }
        public class OnRenderViewReadyEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
        }
        public class OnResourceLoadCompleteEventArgs : EventArgs
        {
            public IWebBrowser browserControl { get; set; }
            public IBrowser browser { get; set; }
            public IFrame frame { get; set; }
            public IRequest request { get; set; }
            public IResponse response { get; set; }
            public UrlRequestStatus status { get; set; }
            public long receivedContentLength { get; set; }
        }
     
        public class BrowserRequestHandler : IRequestHandler
        {
            //public string Cookies;
            //https://github.com/cefsharp/CefSharp/blob/master/CefSharp/IRequestHandler.cs
     
            public static readonly string VersionNumberString = String.Format("Chromium: {0}, CEF: {1}, CefSharp: {2}",
                Cef.ChromiumVersion, Cef.CefVersion, Cef.CefSharpVersion);
     
            public event EventHandler<OnBeforeBrowseEventArgs> OnBeforeBrowseEvent;
            public event EventHandler<OnCertificateErrorEventArgs> OnCertificateErrorEvent;
            public event EventHandler<OnBeforeResourceLoadEventArgs> OnBeforeResourceLoadEvent;
            public event EventHandler<OnResourceRedirectEventArgs> OnResourceRedirectEvent;
            public event EventHandler<OnResourceResponseEventArgs> OnResourceResponseEvent;
            public event EventHandler<OnOpenUrlFromTabArgs> OnOpenUrlFromTabEvent;
            public event EventHandler<OnPluginCrashedEventArgs> OnPluginCrashedEvent;
            public event EventHandler<GetAuthCredentialsEventArgs> GetAuthCredentialsEvent;
            public event EventHandler<OnRenderProcessTerminatedEventArgs> OnRenderProcessTerminatedEvent;
            public event EventHandler<OnQuotaRequestEventArgs> OnQuotaRequestEvent;
            public event EventHandler<OnProtocolExecutionEventArgs> OnProtocolExecutionEvent;
            public event EventHandler<OnRenderViewReadyEventArgs> OnRenderViewReadyEvent;
            public event EventHandler<OnResourceLoadCompleteEventArgs> OnResourceLoadCompleteEvent;
     
            //----------------------------------------------------
     
            bool IRequestHandler.OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
            {
                /*
                <summary> 
                Called before browser navigation. 
                If the navigation is allowed <see cref="IWebBrowser.FrameLoadStart"/> and <see cref="IWebBrowser.FrameLoadEnd"/> 
                will be called. If the navigation is canceled <see cref="IWebBrowser.LoadError"/> will be called with an ErrorCode 
                value of <see cref="CefErrorCode.Aborted"/>.  
                </summary> 
                <param name="browserControl">the ChromiumWebBrowser control</param> 
                <param name="browser">the browser object</param> 
                <param name="frame">The frame the request is coming from</param> 
                <param name="request">the request object - cannot be modified in this callback</param> 
                <param name="isRedirect">has the request been redirected</param> 
                <returns>Return true to cancel the navigation or false to allow the navigation to proceed.</returns> 
                */
                //EventHandler<OnBeforeBrowseEventArgs> handler = OnBeforeBrowseEvent;
                OnBeforeBrowseEventArgs args = new OnBeforeBrowseEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.frame = frame;
                args.request = request;
                args.bok = false;
                args.isRedirect = isRedirect;
                if (OnBeforeBrowseEvent != null && this != null && args != null)
                {
                    OnBeforeBrowseEvent(this, args);
                    return args.bok;
                }
                return false;
            }
     
            //----------------------------------------------------
     
            bool IRequestHandler.OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
            {
                /*
                public boolean onCertificateError(CertificateErrorParams params)
                Allows using problematic SSL certificates.Returns false.
                Specified by:
                onCertificateError in interface LoadHandler
                Parameters:
                params - provides information about problematic SSL certificate.
                Returns:
                true if loading must be canceled and false if you ignore SSL certificate error and want to load the required resource.
                */
                //EventHandler<OnCertificateErrorEventArgs> handler = OnCertificateErrorEvent;
                OnCertificateErrorEventArgs args = new OnCertificateErrorEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.errorCode = errorCode;
                args.requestUrl = requestUrl;
                args.sslInfo = sslInfo;
                args.callback = callback;
                args.bok = false;
                if (OnCertificateErrorEvent != null && this != null && args != null)
                {
                    OnCertificateErrorEvent(this, args);
                    return args.bok;
                }
                return false;
            }
     
            //----------------------------------------------------
     
            //EventHandler<OnBeforeResourceLoadEventArgs> handlerOnBeforeResourceLoad;// = OnBeforeResourceLoadEvent;
     
            //public delegate void OnBeforeResourceLoadEventHandler(object sender, OnBeforeResourceLoadEventArgs arg);
            //public event OnBeforeResourceLoadEventHandler OnBeforeResourceLoadEvent;
            CefReturnValue IRequestHandler.OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
            {
                // For some reason, in order to set cookies manually using a hdeader you need to clear the real cookies every time :/
                /*
                Cef.GetGlobalCookieManager().VisitAllCookies(new DeleteAllCookiesVisitor());
                if (request.Url.StartsWith("steammobile://"))
                {
                    // Cancel all steammobile:// requests (for the app)
                    return CefReturnValue.Cancel;
                }
                else
                {
                    var headers = request.Headers;
                    headers.Add("Cookie", Cookies);
                    headers.Add("X-Requested-With", "com.valvesoftware.android.steam.community");
                    request.Headers = headers;
                    return CefReturnValue.Continue;
                }
                */
     
                //EventHandler<OnBeforeResourceLoadEventArgs> handler = OnBeforeResourceLoadEvent;
                //OnBeforeResourceLoadEventHandler handler = OnBeforeResourceLoadEvent;
                //handlerOnBeforeResourceLoad = OnBeforeResourceLoadEvent;
                OnBeforeResourceLoadEventArgs args = new OnBeforeResourceLoadEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.frame = frame;
                args.request = request;
                args.callback = callback;
                args.iReturn = 1;
                if (OnBeforeResourceLoadEvent != null && this != null && args != null)
                {
                    OnBeforeResourceLoadEvent(this, args);
                    switch (args.iReturn)
                    {
                        case 0:
                            return CefSharp.CefReturnValue.Cancel;
                        case 1:
                            return CefSharp.CefReturnValue.Continue;
                        case 2:
                            return CefSharp.CefReturnValue.ContinueAsync;
                        default:
                            return CefSharp.CefReturnValue.Continue;
                    }
     
                }
                return CefSharp.CefReturnValue.Continue;
            }
     
            //----------------------------------------------------
     
            void IRequestHandler.OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl)
            {
                //EventHandler<OnResourceRedirectEventArgs> handler = OnResourceRedirectEvent;
                OnResourceRedirectEventArgs args = new OnResourceRedirectEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.frame = frame;
                args.request = request;
                args.newUrl = newUrl;
                if (OnResourceRedirectEvent != null && this != null && args != null)
                {
                    OnResourceRedirectEvent(this, args);
                }
            }
     
            //----------------------------------------------------
     
            bool IRequestHandler.OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
            {
                //EventHandler<OnResourceResponseEventArgs> handler = OnResourceResponseEvent;
                OnResourceResponseEventArgs args = new OnResourceResponseEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.frame = frame;
                args.request = request;
                args.response = response;
                args.bok = false;
                if (OnResourceResponseEvent != null && this != null && args != null)
                {
                    OnResourceResponseEvent(this, args);
                    return args.bok;
                }
                return false;
            }
     
            //----------------------------------------------------
     
            public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
            {
                //EventHandler<OnOpenUrlFromTabArgs> handler = OnOpenUrlFromTabEvent;
                OnOpenUrlFromTabArgs args = new OnOpenUrlFromTabArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.frame = frame;
                args.targetUrl = targetUrl;
                args.targetDisposition = targetDisposition;
                args.userGesture = userGesture;
                args.bok = false;
                if (OnOpenUrlFromTabEvent != null && this != null && args != null)
                {
                    OnOpenUrlFromTabEvent(this, args);
                    return args.bok;
                }
                return false;
            }
     
            //----------------------------------------------------
     
            public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
            {
                //EventHandler<OnPluginCrashedEventArgs> handler = OnPluginCrashedEvent;
                OnPluginCrashedEventArgs args = new OnPluginCrashedEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.pluginPath = pluginPath;
                if (OnPluginCrashedEvent != null && this != null && args != null)
                {
                    OnPluginCrashedEvent(this, args);
                }
            }
     
            //----------------------------------------------------
     
            public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
            {
                //EventHandler<GetAuthCredentialsEventArgs> handler = GetAuthCredentialsEvent;
                GetAuthCredentialsEventArgs args = new GetAuthCredentialsEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.frame = frame;
                args.isProxy = isProxy;
                args.host = host;
                args.port = port;
                args.realm = realm;
                args.scheme = scheme;
                args.callback = callback;
                args.bok = false;
                if (GetAuthCredentialsEvent != null && this != null && args != null)
                {
                    GetAuthCredentialsEvent(this, args);
                    return args.bok;
                }
                return true;
            }
     
            //----------------------------------------------------
     
            public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
            {
               //EventHandler<OnRenderProcessTerminatedEventArgs> handler = OnRenderProcessTerminatedEvent;
                OnRenderProcessTerminatedEventArgs args = new OnRenderProcessTerminatedEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.status = status;
                if (OnRenderProcessTerminatedEvent != null && this != null && args != null)
                {
                    OnRenderProcessTerminatedEvent(this, args);
                }
            }
     
            //----------------------------------------------------
     
            public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
            {
                //EventHandler<OnQuotaRequestEventArgs> handler = OnQuotaRequestEvent;
                OnQuotaRequestEventArgs args = new OnQuotaRequestEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.originUrl = originUrl;
                args.newSize = newSize;
                args.callback = callback;
                args.bok = true;
                if (OnQuotaRequestEvent != null && this != null && args != null)
                {
                    OnQuotaRequestEvent(this, args);
                    return args.bok;
                }
                return true;
            }
     
            //----------------------------------------------------
     
            public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
            {
                //EventHandler<OnProtocolExecutionEventArgs> handler = OnProtocolExecutionEvent;
                OnProtocolExecutionEventArgs args = new OnProtocolExecutionEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.url = url;
                args.bok = true;
                if (OnProtocolExecutionEvent != null && this != null && args != null)
                {
                    OnProtocolExecutionEvent(this, args);
                    return args.bok;
                }
                return true;
            }
     
            //----------------------------------------------------
     
            public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
            {
                //EventHandler<OnRenderViewReadyEventArgs> handler = OnRenderViewReadyEvent;
                OnRenderViewReadyEventArgs args = new OnRenderViewReadyEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                if (OnRenderViewReadyEvent != null && this != null && args != null)
                {
                    OnRenderViewReadyEvent(this, args);
                }
            }
     
            //----------------------------------------------------
     
            public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
            {
                //EventHandler<OnResourceLoadCompleteEventArgs> handler = OnResourceLoadCompleteEvent;
                OnResourceLoadCompleteEventArgs args = new OnResourceLoadCompleteEventArgs();
                args.browserControl = browserControl;
                args.browser = browser;
                args.frame = frame;
                args.request = request;
                args.response = response;
                args.status = status;
                args.receivedContentLength = receivedContentLength;
                if (OnResourceLoadCompleteEvent != null && this != null && args != null)
                {
                    OnResourceLoadCompleteEvent(this, args);
                }
            }
     
            public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
            {
                return null;
            }
        }
     
        //--------------------------------------------------------------------
        //Implémentation de l'interface de gestions des téléchargements
     
        public class OnBeforeDownloadEventArgs : EventArgs
        {
            public IBrowser browser { get; set; }
            public DownloadItem downloadItem { get; set; }
            public IBeforeDownloadCallback callback { get; set; }
        }
        public class OnDownloadUpdatedEventArgs : EventArgs
        {
            public IBrowser browser { get; set; }
            public DownloadItem downloadItem { get; set; }
            public IDownloadItemCallback callback { get; set; }
        }
     
        public class DownloadHandler : IDownloadHandler
        {
     
            //public event EventHandler<OnBeforeDownloadEventArgs> OnBeforeDownloadEvent;
            public event EventHandler<OnDownloadUpdatedEventArgs> OnDownloadUpdatedEvent;
     
            public void OnBeforeDownload(IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
            {
                if (!callback.IsDisposed)
                {
                    using (callback)
                    {
                        callback.Continue(downloadItem.SuggestedFileName, showDialog: true);
                    }
                }
            }
     
            //----------------------------------------------------
     
            public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
            {
                //EventHandler<OnDownloadUpdatedEventArgs> handler = OnDownloadUpdatedEvent;
                OnDownloadUpdatedEventArgs args = new OnDownloadUpdatedEventArgs();
                args.browser = browser;
                args.downloadItem = downloadItem;
                args.callback = callback;
                if (OnDownloadUpdatedEvent != null && this != null && args != null)
                {
                    OnDownloadUpdatedEvent(this, args);
                }
            }
        }
     
        //--------------------------------------------------------------------
        //Implémentation de l'interface de gestions des fenêtres
     
        //https://github.com/cefsharp/CefSharp/blob/master/CefSharp/ILifeSpanHandler.cs
        //https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Wpf.Example/Handlers/LifespanHandler.cs
     
        public class LifeSpanHandler : ILifeSpanHandler
        {
            bool bOnBeforePopupStartProcess;
     
            //public event Action<string> PopupRequest;
            public bool DoClose(IWebBrowser browserControl, IBrowser browser)
            {
                //throw new NotImplementedException();
                return false;
            }
            public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
            {
                //throw new NotImplementedException();
                return;
            }
     
            public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
            {
                //throw new NotImplementedException();
                return;
            }
     
            public void set_bOnBeforePopupStartProcess(bool _bOnBeforePopupStartProcess)
            {
                this.bOnBeforePopupStartProcess = _bOnBeforePopupStartProcess;
            }
     
            public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
            {
                //Preserve new windows to be opened and load all popup urls in the same browser view
                newBrowser = null;
                if (this.bOnBeforePopupStartProcess)
                {
                    Process.Start(targetUrl);
                }
                else
                {
                    browserControl.Load(targetUrl);
                }
                return true;
            }
        }
     
    }

    Voilà,

    Bonne prog



    Bonjour pouvez vous SVP publier le code source pour gérer les popups lorsque on clique sur un lien dans un navigateur ceci s'ouvre dans un nouvel Onglet Merci d'avance

  16. #116
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2021
    Messages : 6
    Points : 6
    Points
    6
    Par défaut supprimer les pub
    Bonjour, quelqu'un a réussis à gérer les pub dans le navigateur, ou a installer adblock ?
    merci

  17. #117
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Juillet 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Kiribati

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Juillet 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut webrtc leak
    Bonjour, quelqu'un a réussi à désactiver webrtc leak

Discussions similaires

  1. [.NET / XAML] Chromium dans une application WinDev
    Par Gaautman dans le forum WinDev
    Réponses: 43
    Dernier message: 22/02/2017, 18h58
  2. [WD14] Comment insérer une animation flash dans une fenêtre Windev ?
    Par samoel24 dans le forum WinDev
    Réponses: 6
    Dernier message: 20/08/2013, 16h49
  3. Utilisé Tix dans une fenêtre crée avec Tkinter
    Par Jiyuu dans le forum Tkinter
    Réponses: 4
    Dernier message: 07/02/2008, 18h45
  4. [WINDEV 8] Lancer un exe dans une fenetre windev
    Par momobulle dans le forum WinDev
    Réponses: 7
    Dernier message: 30/08/2007, 14h42
  5. intégrer le résultat de sp_spaceused dans une table
    Par Labienus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/11/2005, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo