CefShap загружает расширение из каталога

#c# #winforms #cefsharp #chromium-embedded

#c# #winforms #cefsharp #встроенный в chromium

Вопрос:

Мне нужна помощь, чтобы загрузить распакованный (или упакованный, если вы знаете, как я могу это сделать) каталог формы.
Я много искал, но не нашел ничего обновленного для этого.

Я пытаюсь вызвать эту функцию:

 this.browser.RequestContext.LoadExtensionFromDirectory(Directory.GetCurrentDirectory()   
    "/vendors/static/fcfhplploccackoneaefokcmbjfbkenj", ???????????? );
  

Но я не нахожу способа получить IExtensionHandler описанное в документации:

RequestContextExtensions.LoadExtensionsFromDirectory

У меня есть простой встроенный браузер CefSharp в форме, в которой я пытаюсь загрузить расширение.
Я не могу понять, как это получить IExtensionHandler .

Вот мой код:

 public partial class MainEmbedBrowser : Form
{
    private string ID;
    private ChromiumWebBrowser browser;

    public MainEmbedBrowser(string url, string combo)
    {
        InitializeComponent();

        this.browser = new ChromiumWebBrowser("localhost", new RequestContext());
        //this.browser.RequestContext.LoadExtensionFromDirectory(Directory.GetCurrentDirectory()   "/vendors/static/fcfhplploccackoneaefokcmbjfbkenj", extensionHandler);
        this.Controls.Add(browser);
        this.browser.Load("https://google.com");

        this.browser.Height = this.Height;
        this.browser.Width = this.Width;
        this.Show();
    }
}
  

Если кто-то может мне помочь, заранее спасибо

Комментарии:

1. Что вы пробовали до сих пор? Можете ли вы поделиться имеющимся у вас кодом?

Ответ №1:

У меня нет никакого опыта работы с этой функциональностью, однако, просмотрев документацию, для ваших «вопросительных знаков» вам нужно будет указать класс, который реализует интерфейс IExtensionHandler.. Итак, прежде всего вам нужно будет создать что-то вроде этого:

 public class MyExtHandler : IExtensionHandler
{
    bool CanAccessBrowser(IExtension extension,IBrowser browser,bool includeIncognito,IBrowser targetBrowser)
    {
        return true;
    }

    IBrowser GetActiveBrowser(IExtension extension,IBrowser browser,bool includeIncognito)
    {
        return browser;
    }

    bool GetExtensionResource(IExtension extension,IBrowser browser,string file, IGetExtensionResourceCallback callback)
    {
        return true;
    }

    bool OnBeforeBackgroundBrowser(IExtension extension, string url, IBrowserSettings settings)
    {
        return true;
    }

    bool OnBeforeBrowser(IExtension extension,IBrowser browser,IBrowser activeBrowser,int index,string url,bool active,IWindowInfo windowInfo,IBrowserSettings settings)
    {
        return true;
    }

    void OnExtensionLoaded(IExtension extension)
    {
    }

    void OnExtensionLoadFailed(CefErrorCode errorCode)
    {
    }

    void OnExtensionUnloaded(IExtension extension)
    {
    }
}
  

Затем, когда вызываются функции из этого интерфейса, вы можете решить, что вы хотите сделать с ними в своем конкретном классе. На данный момент я просто установил для них возврат по умолчанию.

После того, как вы определили свой класс, вы можете создать экземпляр, чтобы перейти к приведенной выше строке кода. Что-то вроде:

 var myExtHandler = new MyExtHandler();

this.browser.RequestContext.LoadExtensionFromDirectory(Directory.GetCurrentDirectory()   "/vendors/static/fcfhplploccackoneaefokcmbjfbkenj",myExtHandler  );
  

Я надеюсь, что это поможет вам начать. Помимо приведенного выше кода, у меня здесь нет дополнительного опыта.