#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 );
Я надеюсь, что это поможет вам начать. Помимо приведенного выше кода, у меня здесь нет дополнительного опыта.