Как включить расширение в WebView2
Я установил расширение Chrome в Microsoft Edge (Chromium) для воспроизведения видео HLS. Я пробовал использовать Microsoft Edge (Chromium), и он отлично работает. URL-адрес HLS - http://localhost/hls/taiguo/playlist.m3u8, а в браузере Microsoft Edge он отображает URL-адрес следующим образом: extension: //ekcifneimckhkjdfklkkpdlnckcjhmke/index.html# http://localhost/hls/taiguo/playlist.m3u8.
Когда я использую WebView2 для встраивания браузера в приложение Windows, следуя [Начало работы с WebView2 (предварительная версия для разработчиков)] ( https://docs.microsoft.com/en-us/microsoft-edge/hosting/webview2/gettingstarted) образец кода:
`CreateCoreWebView2EnvironmentWithDetails(nullptr, nullptr, nullptr, Callback([hWnd](результат HRESULT, ICoreWebView2Environment* env) -> HRESULT {
RETURN_IF_FAILED(result);
// Create a CoreWebView2Host and get the associated CoreWebView2 whose parent is the main window hWnd
env->CreateCoreWebView2Host(hWnd, Callback<ICoreWebView2CreateCoreWebView2HostCompletedHandler>(
[hWnd](HRESULT result, ICoreWebView2Host* host) -> HRESULT {
if (host != nullptr) {
webviewHost = host;
webviewHost->get_CoreWebView2(&webviewWindow);
}
// Add a few settings for the webview
// this is a redundant demo step as they are the default settings values
ICoreWebView2Settings* Settings;
webviewWindow->get_Settings(&Settings);
Settings->put_IsScriptEnabled(TRUE);
Settings->put_AreDefaultScriptDialogsEnabled(TRUE);
Settings->put_IsWebMessageEnabled(TRUE);
// Resize WebView to fit the bounds of the parent window
RECT bounds;
GetClientRect(hWnd, &bounds);
webviewHost->put_Bounds(bounds);
// Schedule an async task to navigate to Bing
webviewWindow->Navigate(L"http://localhost/hls/taiguo/playlist.m3u8");`
Если я запустил приведенный выше код, приложение просто загрузит файл playlist.m3u8, не воспроизводя видео. Если я изменю параметр URL-адреса webviewWindow->Navigate(...) на:
webviewWindow->Navigate(L"extension://ekcifneimckhkjdfklkkpdlnckcjhmke/index.html#http://localhost/hls/taiguo/playlist.m3u8");
Затем я получаю сообщение об ошибке, как показано ниже:Снимок экрана приложения
Надеюсь, кто-нибудь подскажет, как запустить расширение с помощью WebView2 API.
1 ответ
Я работаю над проектом WebView2. Позвольте мне начать с того, что WebView2 в настоящее время не поддерживает расширения. Это довольно сложная функция, и нам придется сделать довольно много вариантов дизайна, поэтому, прежде чем они будут устранены, мы намеренно отключаем расширения. Мы определенно готовы поддержать его в будущем, и в нашем репозитории отзывов есть проблема, отслеживающая запрос функции - https://github.com/MicrosoftEdge/WebViewFeedback/issues/81. Было бы здорово, если бы вы вмешались и поговорили о своем варианте использования, чтобы у нас было больше информации о том, что вы ищете. Например, разработчики, разрешающие произвольные расширения для своих приложений (например, я хочу, чтобы блокировщик рекламы следил за моим веб-контентом), о чем, я думаю, вы и спрашиваете, сильно отличается от предоставления конечным пользователям возможности устанавливать расширения в веб-просмотр.
Тем не менее, с технической точки зрения, даже если WebView2 сегодня поддерживает расширения, установленные пользователем расширения из браузера не будут отображаться в WebView2. Браузер хранит свои расширения в своей папке пользовательских данных (см. C:\Users\username\AppData\Local\Microsoft\Edge SxS\User Data\Default\Extensions for Canary), которая также содержит такие вещи, как файлы cookie, кеши и т. Д. WebView2 у приложений есть собственная папка с пользовательскими данными, и они не могут использовать пользовательские данные браузера из-за угроз безопасности.