5

.NET 4.0 アプリケーション内でCefSharp Web ブラウザーを使用しようとしています。ローカルに保存されている html および js コンテンツからページをロードします。file://したがって、Web ブラウザーはプロトコルを使用してページを開きます。

ページ遷移はjQuery(ajax)で行い、XMLHttpRequest cannot load file:///XXXXXXXX/Debug/res/www/shared/js/src/views/homeView.html. Cross origin requests are only supported for HTTP.

私は、Schemehandler を使用して、ProcessRequestfile://関数をオーバーライドして、ドメイン内のページの読み込みを処理しようとしました。

class SchemeHandlerFactory : ISchemeHandlerFactory
{
    public ISchemeHandler Create()
    {
        return new SchemeHandler();
    }
}

class SchemeHandler : ISchemeHandler
{
    public SchemeHandler()
    {
    }

    public bool ProcessRequest(IRequest request, ref string mimeType, ref Stream stream)
    {
        var uri = new Uri(request.Url);
        var segments = uri.Segments;
        var file = segments[segments.Length - 1];

        var bytes = File.ReadAllBytes(request.Url.Replace("file:///",""));
            stream = new MemoryStream(bytes);
            mimeType = "text/html";

            return true;
    }
}

そして、次を追加して、フォームコードで使用します。

CEF.RegisterScheme("file", new SchemeHandlerFactory());

それは何も変わりません。

CefSharp リポジトリのコミット ログを確認したところ、クロス AppDomain がサポートされるようになりましたが、どのように使用すればよいですか? https://github.com/cefsharp/CefSharp/pull/35

また、CefSharp を再コンパイル して、Web ブラウザーがローカル ファイルに対してGET操作を実行するときに返されるすべての要求にAccess-Control-Allow-Originを追加することも考えました。

私はアイデアがありません。

4

2 に答える 2

1

このコードはCEFで機能します: r3.2987.1601 (Windows フォーム)

browser = new ChromiumWebBrowser("www.websites.com")
            {
                Dock = DockStyle.Fill,
            };
toolStripContainer.ContentPanel.Controls.Add(browser);

//browser.BrowserSettings.WebSecurity = CefState.Disabled;
browser.BrowserSettings.FileAccessFromFileUrls = CefState.Enabled;
browser.BrowserSettings.UniversalAccessFromFileUrls = CefState.Enabled;

https://github.com/cefsharp/CefSharp/issues/1397

次の点に十分注意してください。

//browser.BrowserSettings.WebSecurity = CefState.Disabled;

このコードにより、コンピューターは悪意のある攻撃に対して脆弱になります。

于 2017-08-11T18:51:18.770 に答える