c# - CefSharp और क्रॉसडोमेन




xmlhttprequest cross-domain (2)

मुझे समाधान मिला, यहां यह है कि किसी को इसके साथ मदद की ज़रूरत है:

  BrowserSettings browserSettings = new BrowserSettings();
  browserSettings.FileAccessFromFileUrlsAllowed = true;
  browserSettings.UniversalAccessFromFileUrlsAllowed = true;
  browserSettings.TextAreaResizeDisabled = true;
  string urlToNavigate =
                 Application.StartupPath + @"\res\www\shared\index.html";
  web_view = new WebView(urlToNavigate, browserSettings);

हमें FileAccessFromFileUrls को सच और UniversalAccessFromFileUrls को अनुमति दी गई है

मैं .NET 4.0 अनुप्रयोग के अंदर CefSharp वेब ब्राउज़र का उपयोग करने की कोशिश कर रहा हूं। मैं एचटीएमएल से पृष्ठों को लोड करता हूं और जेएस सामग्री स्थानीय स्तर पर संग्रहीत करता हूं। तो वेब ब्राउजर file:// साथ पृष्ठ खोलता है file:// प्रोटोकॉल

पृष्ठ संक्रमण jQuery (AJAX) के साथ बनाये जाते हैं और मुझे एक XMLHttpRequest cannot load file:///XXXXXXXX/Debug/res/www/shared/js/src/views/homeView.html. Cross origin requests are only supported for HTTP. XMLHttpRequest cannot load file:///XXXXXXXX/Debug/res/www/shared/js/src/views/homeView.html. Cross origin requests are only supported for HTTP.

मैंने एक Schemehandler का उपयोग करने की कोशिश की और file:// अंदर पेज लोड को संभाल करने के लिए ProcessRequest फ़ंक्शन को ओवरराइड किया file:// domain

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 रेपो पर लॉग को चेक किया और यह कहता है कि क्रॉस ऐपडोमेन अब समर्थित है, लेकिन मैं इसका उपयोग कैसे करूँ? https://github.com/cefsharp/CefSharp/pull/35

मैंने यह भी सोचा कि CefSharp को वेब ब्राउज़र द्वारा दिए गए सभी अनुरोधों को एक्सेस-कंट्रोल-अनुमति-उत्पत्ति जोड़ने के लिए recompiling पर विचार किया जाता है जब वह स्थानीय फ़ाइलों पर GET ऑपरेशन निष्पादित करता है।

मैं विचारों से बाहर हूँ


यह कोड सीईएफ पर काम करता है: r3.2987.1601 (विंडोज फॉर्म)

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;

यह कोड आपके कंप्यूटर को दुर्भावनापूर्ण हमलों के लिए कमजोर छोड़ देता है







cefsharp