.net cefsharp - c#filenotfoundexception sur webbrowser?




wpf dll (4)

Essayez webBrowser1.Document.Body.InnerText .

if (webBrowser1.DocumentText.IndexOf("Page: 1") != -1)

sur la ligne ci-dessus, je reçois cette exception

System.IO.FileNotFoundException was unhandled Message = "Le système ne trouve pas le fichier spécifié. (Exception de HRESULT: 0x80070002)"
Source = "System.Windows.Forms"
StackTrace: à System.Windows.Forms.UnsafeNativeMethods.IPersistStreamInit.Save (IStream pstm, boolean fClearDirty) à System.Windows.Forms.WebBrowser.get_DocumentStream () à System.Windows.Forms.WebBrowser.get_DocumentText () à WindowsFormsApplication1.Form1. GénérerETGWorklists () dans C: \ Documents and Settings \ agordon \ Mes documents \ Visual Studio 2008 \ Projects \ GenerateWorklists \ GenerateWorklists \ Form1.cs: ligne 603 à WindowsFormsApplication1.Form1.btnProcess_Click (Expéditeur d'objet, EventArgs e) dans C: \ Documents et paramètres \ agordon \ Mes documents \ Visual Studio 2008 \ Projects \ GenerateWorklists \ GenerateWorklists \ Form1.cs: ligne 55 à System.Windows.Forms.Control.OnClick (EventArgs e) à System.Windows.Forms.Button.OnClick (EventArgs e) à System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent) à System.Windows.Forms.Control.WmMouseUp (Message & m, bouton MouseButtons, clics Int32) à System.Windows.Forms.Control.WndProc (Message & m) à System.Windows.Forms.ButtonBase.WndProc (Message & m) à System.W indows.Forms.Button.WndProc (Message & m) à System.Windows.Forms.ControlNativeWindow.OnMessage (Message & m) à System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) à System.Windows.Forms. NativeWindow.DebuggableCallback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW (MSG & msg) à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager .FPushMessageLoop (Int32 dwComponentID, raison Int32, Int32 pvLoopData) à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (raison Int32, contexte ApplicationContext) à System.Windows.Forms.Application.ThreadContext.RunMessageLoop (raison Int32, contexte ApplicationContext) à System.Windows.Forms.Application.Run (Formulaire mainForm) à WindowsFormsApplication1.Program.Main () dans C: \ Documents and Settings \ agordon \ Mes documents \ Visual Studio 2008 \ Projects \ GenerateWorklists \ GenerateWorklists \ Program.cs: ligne 1 8 à System.AppDomain._nExecuteAssembly (assembly Assembly, String [] args) à System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () à System.Threading .ThreadHelper.ThreadStart_Context (état de l'objet) sur System.Threading.ExecutionContext.Run (ExecutionContext executionContext, callback ContextCallback, état de l'objet) sur System.Threading.ThreadHelper.ThreadStart () InnerException:

Qu'est-ce que cela veut dire? Je n'ai pas eu cette erreur hier et je l'ai reçue aujourd'hui. la page Web n'ouvre aucun problème et le texte Page: 1 est définitivement là.

Voici un problème similaire également sans solution http://bytes.com/topic/c-sharp/answers/657812-webbrowser-documenttext-getting-problem


C'est un bug connu et microsoft ne fait rien à ce sujet pour vs2008 au moins. voici une solution:

String lastsource = ((mshtml.HTMLDocumentClass)(((webBrowser1.Document.DomDocument)))).documentElement.innerHTML;
            webBrowser1.Document.OpenNew(true);
            webBrowser1.Document.Write(lastsource);  

maintenant nous pouvons accéder à DocumentText sans problème

mshtml pas oublier d'importer mshtml comme référence


J'ai aussi trouvé étrange que le contrôle du navigateur Web lançait une exception liée à l'accès aux fichiers, lorsque je chargeais une page à partir du Web.

En regardant dans cela, j'ai remarqué quelque chose d'étrange: Cette erreur est beaucoup moins fréquente lorsque les fichiers Internet temporaires ont été récemment effacés.

J'ai modifié mon application pour qu'elle efface automatiquement les fichiers Internet temporaires au démarrage de l'application, ce qui était suffisant pour résoudre 90% de ces erreurs.

Mon code pour nettoyer les fichiers Internet temporaires est ci-dessous ... Je ne pense pas que cela fonctionnera sur tous les systèmes d'exploitation - il peut y avoir une meilleure façon - mais cela convient à mes besoins, car il fonctionne sur Server 2008.

(mon code est dans vb.net, mais la version c # ne devrait pas être trop difficile à comprendre.)

        'start cleaning the temporary internet files
        Dim clearFilesProcess As Process = System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 255")

        'wait for the temporary internet files to be deleted
        While Not (clearFilesProcess.HasExited)
            System.Threading.Thread.Sleep(200)
        End While

Après avoir lu chaque réponse et les avoir essayés, aucun d'entre eux ne m'a aidé. Ce que j'ai trouvé en cherchant ailleurs, c'est que vous pouvez créer un attribut personnalisé que vous pouvez ensuite ajouter à votre contrôleur. Il écrase les fichiers EnableCors et ajoute les domaines en liste blanche.

Cette solution fonctionne bien car elle vous permet d'avoir les domaines en liste blanche dans le webconfig (appsettings) au lieu de les coder dans l'attribut EnableCors de votre contrôleur.

 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class EnableCorsByAppSettingAttribute : Attribute, ICorsPolicyProvider
{
    const string defaultKey = "whiteListDomainCors";
    private readonly string rawOrigins;
    private CorsPolicy corsPolicy;

    /// <summary>
    /// By default uses "cors:AllowedOrigins" AppSetting key
    /// </summary>
    public EnableCorsByAppSettingAttribute()
        : this(defaultKey) // Use default AppSetting key
    {
    }

    /// <summary>
    /// Enables Cross Origin
    /// </summary>
    /// <param name="appSettingKey">AppSetting key that defines valid origins</param>
    public EnableCorsByAppSettingAttribute(string appSettingKey)
    {
        // Collect comma separated origins
        this.rawOrigins = AppSettings.whiteListDomainCors;
        this.BuildCorsPolicy();
    }

    /// <summary>
    /// Build Cors policy
    /// </summary>
    private void BuildCorsPolicy()
    {
        bool allowAnyHeader = String.IsNullOrEmpty(this.Headers) || this.Headers == "*";
        bool allowAnyMethod = String.IsNullOrEmpty(this.Methods) || this.Methods == "*";

        this.corsPolicy = new CorsPolicy
        {
            AllowAnyHeader = allowAnyHeader,
            AllowAnyMethod = allowAnyMethod,
        };

        // Add origins from app setting value
        this.corsPolicy.Origins.AddCommaSeperatedValues(this.rawOrigins);
        this.corsPolicy.Headers.AddCommaSeperatedValues(this.Headers);
        this.corsPolicy.Methods.AddCommaSeperatedValues(this.Methods);
    }

    public string Headers { get; set; }
    public string Methods { get; set; }

    public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request,
                                               CancellationToken cancellationToken)
    {
        return Task.FromResult(this.corsPolicy);
    }
}

    internal static class CollectionExtensions
{
    public static void AddCommaSeperatedValues(this ICollection<string> current, string raw)
    {
        if (current == null)
        {
            return;
        }

        var paths = new List<string>(AppSettings.whiteListDomainCors.Split(new char[] { ',' }));
        foreach (var value in paths)
        {
            current.Add(value);
        }
    }
}

J'ai trouvé ce guide en ligne et cela a fonctionné comme un charme:

http://jnye.co/Posts/2032/dynamic-cors-origins-from-appsettings-using-web-api-2-2-cross-origin-support

Je pensais que je laisserais tomber ici pour quelqu'un dans le besoin.





c# .net browser