0.9.579-Interface ICoreWebView2

Примечание

Эта ссылка больше не поддерживается. Последнюю справку по API можно найти в справочнике по API WebView2.

interface ICoreWebView2
  : public IUnknown

WebView2 позволяет размещать веб-содержимое с помощью новейшей технологии веб-браузера.

Краткий обзор

Участников Описания
add_ContainsFullScreenElementChanged Уведомляет об изменении свойства ContainsFullScreenElement.
add_ContentLoading Добавьте обработчик событий для события ContentLoading.
add_DocumentTitleChanged Добавьте обработчик событий для события DocumentTitleChanged.
add_FrameNavigationCompleted Добавьте обработчик событий для события FrameNavigationCompleted.
add_FrameNavigationStarting Добавьте обработчик событий для события FrameNavigationStarting.
add_HistoryChanged Счетовизменение сведений об прослушивать изменение истории переходов для документа верхнего уровня.
add_NavigationCompleted Добавьте обработчик событий для события NavigationCompleted.
add_NavigationStarting Добавьте обработчик событий для события NavigationStarting.
add_NewWindowRequested Добавьте обработчик событий для события NewWindowRequested.
add_PermissionRequested Добавьте обработчик событий для события PermissionRequested.
add_ProcessFailed Добавьте обработчик событий для события ProcessFailed.
add_ScriptDialogOpening Добавьте обработчик событий для события ScriptDialogOpening.
add_SourceChanged SourceChanged активируется при изменении свойства Source.
add_WebMessageReceived Это событие срабатывает, если задан параметр IsWebMessageEnabled и документ верхнего уровня для вызовов WebView window.chrome.webview.postMessage .
add_WebResourceRequested Добавьте обработчик событий для события WebResourceRequested.
add_WindowCloseRequested Добавьте обработчик событий для события WindowCloseRequested.
AddHostObjectToScript Добавьте предоставленный объект узла в сценарий, выполняемый в WebView с указанным именем.
AddScriptToExecuteOnDocumentCreated Добавьте предоставленный JavaScript в список сценариев, которые должны выполняться после создания глобального объекта, но до начала синтаксического анализа HTML-документа и перед выполнением любого другого сценария, включенного в документ HTML.
AddWebResourceRequestedFilter Добавляет в событие WebResourceRequested код URI и фильтр контекста ресурсов.
CallDevToolsProtocolMethod Вызовите асинхронный метод DevToolsProtocol.
CapturePreview Запишите изображение того, что WebView на экране.
ExecuteScript Выполнение кода JavaScript из параметра JavaScript в текущем документе верхнего уровня, отображаемом в WebView.
get_BrowserProcessId Идентификатор процесса браузера, на котором размещается WebView.
get_CanGoBack Возвращает значение "истина", если WebView может перейти к предыдущей странице в журнале переходов.
get_CanGoForward Возвращает значение "истина", если WebView может перейти к следующей странице в журнале переходов.
get_ContainsFullScreenElement Указывает, содержит ли WebView элемент HTML на весь экран.
get_DocumentTitle Название текущего документа верхнего уровня.
get_Settings Объект ICoreWebView2Settings , содержащий различные изменяемые параметры для запущенного WebView.
get_Source Универсальный код ресурса (URI) текущего документа верхнего уровня.
GetDevToolsProtocolEventReceiver Получение приемника событий протокола DevTools, который позволяет подписаться на событие протокола DevTools.
GoBack Переход по WebView на предыдущую страницу в истории навигации.
GoForward Переход по WebView к следующей странице в истории навигации.
Которому Применяет навигацию по документу верхнего уровня к указанному универсальному коду ресурса (URI).
NavigateToString Запускает навигацию для htmlContent в качестве исходного HTML-кода нового документа.
OpenDevToolsWindow Открытие окна DevTools для текущего документа в WebView.
PostWebMessageAsJson Опубликуйте указанное сообщение в документе верхнего уровня в этом WebView.
PostWebMessageAsString Это вспомогательный объект для отправки сообщения, которое является простой строкой, а не строкой JSON-представления объекта JavaScript.
Перезагрузить Перезагрузите текущую страницу.
remove_ContainsFullScreenElementChanged Удалите обработчик событий, добавленный ранее с помощью соответствующего метода события add_.
remove_ContentLoading Удалите обработчик событий, добавленный ранее add_ContentLoading.
remove_DocumentTitleChanged Удалите обработчик событий, добавленный ранее add_DocumentTitleChanged.
remove_FrameNavigationCompleted Удалите обработчик событий, добавленный ранее add_FrameNavigationCompleted.
remove_FrameNavigationStarting Удалите обработчик событий, добавленный ранее add_FrameNavigationStarting.
remove_HistoryChanged Удалите обработчик событий, добавленный ранее add_HistoryChanged.
remove_NavigationCompleted Удалите обработчик событий, добавленный ранее add_NavigationCompleted.
remove_NavigationStarting Удалите обработчик событий, добавленный ранее add_NavigationStarting.
remove_NewWindowRequested Удалите обработчик событий, добавленный ранее add_NewWindowRequested.
remove_PermissionRequested Удалите обработчик событий, добавленный ранее add_PermissionRequested.
remove_ProcessFailed Удалите обработчик событий, добавленный ранее add_ProcessFailed.
remove_ScriptDialogOpening Удалите обработчик событий, добавленный ранее add_ScriptDialogOpening.
remove_SourceChanged Удалите обработчик событий, добавленный ранее add_SourceChanged.
remove_WebMessageReceived Удалите обработчик событий, добавленный ранее add_WebMessageReceived.
remove_WebResourceRequested Удалите обработчик событий, добавленный ранее add_WebResourceRequested.
remove_WindowCloseRequested Удалите обработчик событий, добавленный ранее add_WindowCloseRequested.
RemoveHostObjectFromScript Удалите объект узла, заданный именем, чтобы он больше не будет доступен из кода JavaScript в WebView.
RemoveScriptToExecuteOnDocumentCreated Удалите соответствующий сценарий JavaScript, который добавляется с использованием AddScriptToExecuteOnDocumentCreated указанного идентификатора сценария.
RemoveWebResourceRequestedFilter Удаляет соответствующий фильтр веб-ресурсов, который ранее был добавлен для события WebResourceRequested.
Stop Остановите все переходы и ожидающие выборки ресурсов.
COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT Формат изображения, используемый в методе ICoreWebView2:: CapturePreview.
COREWEBVIEW2_KEY_EVENT_KIND Тип события клавиши, которое инициировало событие AcceleratorKeyPressed.
COREWEBVIEW2_MOVE_FOCUS_REASON Причина для перемещения фокуса.
COREWEBVIEW2_PERMISSION_KIND Тип запроса разрешения.
COREWEBVIEW2_PERMISSION_STATE Ответ на запрос разрешения.
COREWEBVIEW2_PHYSICAL_KEY_STATUS Структура, представляющая данные, Упакованные в LPARAM, предоставленные событию ключа Win32.
COREWEBVIEW2_PROCESS_FAILED_KIND Состояние сбоя процесса, используемого в интерфейсе ICoreWebView2ProcessFailedEventHandler.
COREWEBVIEW2_SCRIPT_DIALOG_KIND Диалоговое окно вида JavaScript, используемое в интерфейсе ICoreWebView2ScriptDialogOpeningEventHandler.
COREWEBVIEW2_WEB_ERROR_STATUS Значения состояния ошибки для переходов по веб-страницам.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT Перечисление для контекстов запросов веб-ресурсов.

Участников

add_ContainsFullScreenElementChanged

Уведомляет об изменении свойства ContainsFullScreenElement.

общедоступные значения HRESULT add_ContainsFullScreenElementChanged(ICoreWebView2ContainsFullScreenElementChangedEventHandler * eventHandler, EventRegistrationToken * token)

Это означает, что HTML-элемент, находящиеся внутри WebView, помещается на размер WebView или выходит за экран. Это событие полезно, если, например, элемент видео запрашивается на весь экран. Прослушиватель ContainsFullScreenElementChanged может затем изменить размер WebView в ответе.

    // Register a handler for the ContainsFullScreenChanged event.
    CHECK_FAILURE(m_webView->add_ContainsFullScreenElementChanged(
        Callback<ICoreWebView2ContainsFullScreenElementChangedEventHandler>(
            [this](ICoreWebView2* sender, IUnknown* args) -> HRESULT {
                if (m_fullScreenAllowed)
                {
                    CHECK_FAILURE(
                        sender->get_ContainsFullScreenElement(&m_containsFullscreenElement));
                    if (m_containsFullscreenElement)
                    {
                        EnterFullScreen();
                    }
                    else
                    {
                        ExitFullScreen();
                    }
                }
                return S_OK;
            })
            .Get(),
        nullptr));

add_ContentLoading

Добавьте обработчик событий для события ContentLoading.

общедоступные значения HRESULT add_ContentLoading(ICoreWebView2ContentLoadingEventHandler * eventHandler, EventRegistrationToken * token)

ContentLoading срабатывает перед загрузкой содержимого, в том числе сценариев, добавленных с помощью AddScriptToExecuteOnDocumentCreated ContentLoading, не будет срабатывать при выполнении одной навигации по страницам (например, с помощью навигации фрагментов или журнала. pushState навигации). Это следует за событиями NavigationStarting и SourceChanged и предшествовать событиям HistoryChanged и NavigationCompleted.

add_DocumentTitleChanged

Добавьте обработчик событий для события DocumentTitleChanged.

общедоступные значения HRESULT add_DocumentTitleChanged(ICoreWebView2DocumentTitleChangedEventHandler * eventHandler, EventRegistrationToken * token)

Событие активируется, когда свойство DocumentTitle объекта WebView изменяется и может срабатывать до или после события NavigationCompleted.

    // Register a handler for the DocumentTitleChanged event.
    // This handler just announces the new title on the window's title bar.
    CHECK_FAILURE(m_webView->add_DocumentTitleChanged(
        Callback<ICoreWebView2DocumentTitleChangedEventHandler>(
            [this](ICoreWebView2* sender, IUnknown* args) -> HRESULT {
                wil::unique_cotaskmem_string title;
                CHECK_FAILURE(sender->get_DocumentTitle(&title));
                SetWindowText(m_appWindow->GetMainWindow(), title.get());
                return S_OK;
            })
            .Get(),
        &m_documentTitleChangedToken));

add_FrameNavigationCompleted

Добавьте обработчик событий для события FrameNavigationCompleted.

общедоступные значения HRESULT add_FrameNavigationCompleted(ICoreWebView2NavigationCompletedEventHandler * eventHandler, EventRegistrationToken * token)

Событие FrameNavigationCompleted вызывается, когда дочерний кадр полностью загружен (Body. onload) или загрузка остановлена с ошибкой.

    // Register a handler for the FrameNavigationCompleted event.
    // Check whether the navigation succeeded, and if not, do something.
    CHECK_FAILURE(m_webView->add_FrameNavigationCompleted(
        Callback<ICoreWebView2NavigationCompletedEventHandler>(
            [this](ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args)
                -> HRESULT {
                BOOL success;
                CHECK_FAILURE(args->get_IsSuccess(&success));
                if (!success)
                {
                    COREWEBVIEW2_WEB_ERROR_STATUS webErrorStatus;
                    CHECK_FAILURE(args->get_WebErrorStatus(&webErrorStatus));
                    std::wstring error_msg = WebErrorStatusToString(webErrorStatus);
                    MessageBox(nullptr,
                       (std::wstring(L"IFrame navigation failed with the ") +
                         L"give in error " + error_msg).c_str(),
                       L"Navigation Failure", MB_OK);
                    if (webErrorStatus == COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED)
                    {
                        // Do something here if you want to handle a specific error case.
                        // In most cases this isn't necessary, because the WebView will
                        // display its own error page automatically.
                    }
                }
                return S_OK;
            })
            .Get(),
        &m_frameNavigationCompletedToken));

add_FrameNavigationStarting

Добавьте обработчик событий для события FrameNavigationStarting.

общедоступные значения HRESULT add_FrameNavigationStarting(ICoreWebView2NavigationStartingEventHandler * eventHandler, EventRegistrationToken * token)

FrameNavigationStarting активируется, когда дочерний кадр в WebView, запрашивающий разрешение на переход к другому URI. Это будет срабатывать и для перенаправления.

    // Register a handler for the FrameNavigationStarting event.
    // This handler will prevent a frame from navigating to a blocked domain.
    CHECK_FAILURE(m_webView->add_FrameNavigationStarting(
        Callback<ICoreWebView2NavigationStartingEventHandler>(
            [this](ICoreWebView2* sender,
                   ICoreWebView2NavigationStartingEventArgs* args) -> HRESULT
    {
        wil::unique_cotaskmem_string uri;
        CHECK_FAILURE(args->get_Uri(&uri));

        if (ShouldBlockUri(uri.get()))
        {
            CHECK_FAILURE(args->put_Cancel(true));
        }
        return S_OK;
    }).Get(), &m_frameNavigationStartingToken));

add_HistoryChanged

Счетовизменение сведений об прослушивать изменение истории переходов для документа верхнего уровня.

общедоступные значения HRESULT add_HistoryChanged(ICoreWebView2HistoryChangedEventHandler * eventHandler, EventRegistrationToken * token)

Используйте Счетовизменение сведений об, чтобы проверить, изменилось ли значение CanGoBack/CanGoForward. HistoryChanged также срабатывает для использования GoBack и GoForward. HistoryChanged срабатывает после SourceChanged и ContentLoading. Добавьте обработчик событий для события HistoryChanged.

    // Register a handler for the HistoryChanged event.
    // Update the Back, Forward buttons.
    CHECK_FAILURE(m_webView->add_HistoryChanged(
        Callback<ICoreWebView2HistoryChangedEventHandler>(
            [this](ICoreWebView2* sender, IUnknown* args) -> HRESULT {
                BOOL canGoBack;
                BOOL canGoForward;
                sender->get_CanGoBack(&canGoBack);
                sender->get_CanGoForward(&canGoForward);
                m_toolbar->SetItemEnabled(Toolbar::Item_BackButton, canGoBack);
                m_toolbar->SetItemEnabled(Toolbar::Item_ForwardButton, canGoForward);

                return S_OK;
            })
            .Get(),
        &m_historyChangedToken));

add_NavigationCompleted

Добавьте обработчик событий для события NavigationCompleted.

общедоступные значения HRESULT add_NavigationCompleted(ICoreWebView2NavigationCompletedEventHandler * eventHandler, EventRegistrationToken * token)

Событие NavigationCompleted активируется, когда WebView полностью загружен (Body. onload) или загрузка остановлена с ошибкой.

    // Register a handler for the NavigationCompleted event.
    // Check whether the navigation succeeded, and if not, do something.
    // Also update the Cancel buttons.
    CHECK_FAILURE(m_webView->add_NavigationCompleted(
        Callback<ICoreWebView2NavigationCompletedEventHandler>(
            [this](ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args)
                -> HRESULT {
                BOOL success;
                CHECK_FAILURE(args->get_IsSuccess(&success));
                if (!success)
                {
                    COREWEBVIEW2_WEB_ERROR_STATUS webErrorStatus;
                    CHECK_FAILURE(args->get_WebErrorStatus(&webErrorStatus));
                    if (webErrorStatus == COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED)
                    {
                        // Do something here if you want to handle a specific error case.
                        // In most cases this isn't necessary, because the WebView will
                        // display its own error page automatically.
                    }
                }
                m_toolbar->SetItemEnabled(Toolbar::Item_CancelButton, false);
                m_toolbar->SetItemEnabled(Toolbar::Item_ReloadButton, true);
                return S_OK;
            })
            .Get(),
        &m_navigationCompletedToken));

add_NavigationStarting

Добавьте обработчик событий для события NavigationStarting.

общедоступные значения HRESULT add_NavigationStarting(ICoreWebView2NavigationStartingEventHandler * eventHandler, EventRegistrationToken * token)

NavigationStarting активируется, когда основной кадр WebView запрашивает разрешение на переход на другой URI. Это будет срабатывать и для перенаправления.

    // Register a handler for the NavigationStarting event.
    // This handler will check the domain being navigated to, and if the domain
    // matches a list of blocked sites, it will cancel the navigation and
    // possibly display a warning page.  It will also disable JavaScript on
    // selected websites.
    CHECK_FAILURE(m_webView->add_NavigationStarting(
        Callback<ICoreWebView2NavigationStartingEventHandler>(
            [this](ICoreWebView2* sender,
                   ICoreWebView2NavigationStartingEventArgs* args) -> HRESULT
    {
        wil::unique_cotaskmem_string uri;
        CHECK_FAILURE(args->get_Uri(&uri));

        if (ShouldBlockUri(uri.get()))
        {
            CHECK_FAILURE(args->put_Cancel(true));

            // If the user clicked a link to navigate, show a warning page.
            BOOL userInitiated;
            CHECK_FAILURE(args->get_IsUserInitiated(&userInitiated));
            static const PCWSTR htmlContent =
              L"<h1>Domain Blocked</h1>"
              L"<p>You've attempted to navigate to a domain in the blocked "
              L"sites list. Press back to return to the previous page.</p>";
            CHECK_FAILURE(sender->NavigateToString(htmlContent));
        }
        // Changes to settings will apply at the next navigation, which includes the
        // navigation after a NavigationStarting event.  We can use this to change
        // settings according to what site we're visiting.
        if (ShouldBlockScriptForUri(uri.get()))
        {
            m_settings->put_IsScriptEnabled(FALSE);
        }
        else
        {
            m_settings->put_IsScriptEnabled(m_isScriptEnabled);
        }
        return S_OK;
    }).Get(), &m_navigationStartingToken));

add_NewWindowRequested

Добавьте обработчик событий для события NewWindowRequested.

общедоступные значения HRESULT add_NewWindowRequested(ICoreWebView2NewWindowRequestedEventHandler * eventHandler, EventRegistrationToken * token)

Вызывается, когда содержимое в WebView запросило открыть новое окно, например с помощью Window. Open. Приложение может передавать целевую WebView, которая будет считаться открытым окном.

    // Register a handler for the NewWindowRequested event.
    // This handler will defer the event, create a new app window, and then once the
    // new window is ready, it'll provide that new window's WebView as the response to
    // the request.
    CHECK_FAILURE(m_webView->add_NewWindowRequested(
        Callback<ICoreWebView2NewWindowRequestedEventHandler>(
            [this](ICoreWebView2* sender, ICoreWebView2NewWindowRequestedEventArgs* args) {
                wil::com_ptr<ICoreWebView2Deferral> deferral;
                CHECK_FAILURE(args->GetDeferral(&deferral));
                AppWindow* newAppWindow;

                wil::com_ptr<ICoreWebView2ExperimentalNewWindowRequestedEventArgs>
                    experimentalArgs;
                CHECK_FAILURE(args->QueryInterface(IID_PPV_ARGS(&experimentalArgs)));
                wil::com_ptr<ICoreWebView2ExperimentalWindowFeatures> windowFeatures;
                CHECK_FAILURE(experimentalArgs->get_WindowFeatures(&windowFeatures));

                RECT windowRect = {0};
                UINT32 left = 0;
                UINT32 top = 0;
                UINT32 height = 0;
                UINT32 width = 0;
                BOOL shouldHaveToolbar = true;

                BOOL hasPosition = FALSE;
                BOOL hasSize = FALSE;
                CHECK_FAILURE(windowFeatures->HasPosition(&hasPosition));
                CHECK_FAILURE(windowFeatures->HasSize(&hasSize));

                bool useDefaultWindow = true;

                if (!!hasPosition && !!hasSize)
                {
                    CHECK_FAILURE(windowFeatures->get_Left(&left));
                    CHECK_FAILURE(windowFeatures->get_Top(&top));
                    CHECK_FAILURE(windowFeatures->get_Height(&height));
                    CHECK_FAILURE(windowFeatures->get_Width(&width));
                    useDefaultWindow = false;
                }
                CHECK_FAILURE(windowFeatures->get_Toolbar(&shouldHaveToolbar));

                windowRect.left = left;
                windowRect.right = left + (width < s_minNewWindowSize ? s_minNewWindowSize : width);
                windowRect.top = top;
                windowRect.bottom = top + (height < s_minNewWindowSize ? s_minNewWindowSize : height);

                if (!useDefaultWindow)
                {
                  newAppWindow = new AppWindow(m_creationModeId, L"", nullptr, true, windowRect, !!shouldHaveToolbar);
                }
                else
                {
                  newAppWindow = new AppWindow(m_creationModeId, L"");
                }
                newAppWindow->m_isPopupWindow = true;
                newAppWindow->m_onWebViewFirstInitialized = [args, deferral, newAppWindow]() {
                    CHECK_FAILURE(args->put_NewWindow(newAppWindow->m_webView.get()));
                    CHECK_FAILURE(args->put_Handled(TRUE));
                    CHECK_FAILURE(deferral->Complete());
                };

                return S_OK;
            })
            .Get(),
        nullptr));

add_PermissionRequested

Добавьте обработчик событий для события PermissionRequested.

общедоступные значения HRESULT add_PermissionRequested(ICoreWebView2PermissionRequestedEventHandler * eventHandler, EventRegistrationToken * token)

Вызывается, когда содержимое в WebView запрашивает разрешение на доступ к некоторым привилегированным ресурсам.

    // Register a handler for the PermissionRequested event.
    // This handler prompts the user to allow or deny the request.
    CHECK_FAILURE(m_webView->add_PermissionRequested(
        Callback<ICoreWebView2PermissionRequestedEventHandler>(
            [this](
                ICoreWebView2* sender,
                ICoreWebView2PermissionRequestedEventArgs* args) -> HRESULT
    {
        wil::unique_cotaskmem_string uri;
        COREWEBVIEW2_PERMISSION_KIND kind = COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION;
        BOOL userInitiated = FALSE;

        CHECK_FAILURE(args->get_Uri(&uri));
        CHECK_FAILURE(args->get_PermissionKind(&kind));
        CHECK_FAILURE(args->get_IsUserInitiated(&userInitiated));

        std::wstring message = L"Do you want to grant permission for ";
        message += NameOfPermissionKind(kind);
        message += L" to the website at ";
        message += uri.get();
        message += L"?\n\n";
        message += (userInitiated
            ? L"This request came from a user gesture."
            : L"This request did not come from a user gesture.");

        int response = MessageBox(nullptr, message.c_str(), L"Permission Request",
                                   MB_YESNOCANCEL | MB_ICONWARNING);

        COREWEBVIEW2_PERMISSION_STATE state =
              response == IDYES ? COREWEBVIEW2_PERMISSION_STATE_ALLOW
            : response == IDNO  ? COREWEBVIEW2_PERMISSION_STATE_DENY
            :                     COREWEBVIEW2_PERMISSION_STATE_DEFAULT;
        CHECK_FAILURE(args->put_State(state));

        return S_OK;
    }).Get(), &m_permissionRequestedToken));

add_ProcessFailed

Добавьте обработчик событий для события ProcessFailed.

общедоступные значения HRESULT add_ProcessFailed(ICoreWebView2ProcessFailedEventHandler * eventHandler, EventRegistrationToken * token)

Активируется, когда WebView процесс неожиданно завершился или перестал отвечать на запросы.

    // Register a handler for the ProcessFailed event.
    // This handler checks if the browser process failed, and asks the user if
    // they want to recreate the webview.
    CHECK_FAILURE(m_webView->add_ProcessFailed(
        Callback<ICoreWebView2ProcessFailedEventHandler>(
            [this](ICoreWebView2* sender,
                ICoreWebView2ProcessFailedEventArgs* args) -> HRESULT
    {
        COREWEBVIEW2_PROCESS_FAILED_KIND failureType;
        CHECK_FAILURE(args->get_ProcessFailedKind(&failureType));
        if (failureType == COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED)
        {
            int button = MessageBox(
                m_appWindow->GetMainWindow(),
                L"Browser process exited unexpectedly.  Recreate webview?",
                L"Browser process exited",
                MB_YESNO);
            if (button == IDYES)
            {
                m_appWindow->ReinitializeWebView();
            }
        }
        else if (failureType == COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE)
        {
            int button = MessageBox(
                m_appWindow->GetMainWindow(),
                L"Browser render process has stopped responding.  Recreate webview?",
                L"Web page unresponsive", MB_YESNO);
            if (button == IDYES)
            {
                m_appWindow->ReinitializeWebView();
            }
        }
        else if (failureType == COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED)
        {
            int button = MessageBox(
                m_appWindow->GetMainWindow(),
                L"Browser render process exited unexpectedly. Reload page?",
                L"Web page unresponsive", MB_YESNO);
            if (button == IDYES)
            {
                CHECK_FAILURE(m_webView->Reload());
            }
        }
        return S_OK;
    }).Get(), &m_processFailedToken));

add_ScriptDialogOpening

Добавьте обработчик событий для события ScriptDialogOpening.

общедоступные значения HRESULT add_ScriptDialogOpening(ICoreWebView2ScriptDialogOpeningEventHandler * eventHandler, EventRegistrationToken * token)

Событие активируется, когда диалоговое окно JavaScript (предупреждение, подтверждение или запрос) будет отображаться для WebView. Это событие срабатывает только в том случае, если свойству ICoreWebView2Settings:: AreDefaultScriptDialogsEnabled задано значение false. Событие ScriptDialogOpening можно использовать, чтобы подавить диалоговые окна или заменить диалоговые окна по умолчанию пользовательскими диалоговыми окноми.

    // Register a handler for the ScriptDialogOpening event.
    // This handler will set up a custom prompt dialog for the user,
    // and may defer the event if the setting to defer dialogs is enabled.
    CHECK_FAILURE(m_webView->add_ScriptDialogOpening(
        Callback<ICoreWebView2ScriptDialogOpeningEventHandler>(
            [this](
                ICoreWebView2* sender,
                ICoreWebView2ScriptDialogOpeningEventArgs* args) -> HRESULT
    {
        wil::com_ptr<ICoreWebView2ScriptDialogOpeningEventArgs> eventArgs = args;
        auto showDialog = [this, eventArgs]
        {
            wil::unique_cotaskmem_string uri;
            COREWEBVIEW2_SCRIPT_DIALOG_KIND type;
            wil::unique_cotaskmem_string message;
            wil::unique_cotaskmem_string defaultText;

            CHECK_FAILURE(eventArgs->get_Uri(&uri));
            CHECK_FAILURE(eventArgs->get_Kind(&type));
            CHECK_FAILURE(eventArgs->get_Message(&message));
            CHECK_FAILURE(eventArgs->get_DefaultText(&defaultText));

            std::wstring promptString = std::wstring(L"The page at '")
                + uri.get() + L"' says:";
            TextInputDialog dialog(
                m_appWindow->GetMainWindow(),
                L"Script Dialog",
                promptString.c_str(),
                message.get(),
                defaultText.get(),
                /* readonly */ type != COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT);
            if (dialog.confirmed)
            {
                CHECK_FAILURE(eventArgs->put_ResultText(dialog.input.c_str()));
                CHECK_FAILURE(eventArgs->Accept());
            }
        };

        if (m_deferScriptDialogs)
        {
            wil::com_ptr<ICoreWebView2Deferral> deferral;
            CHECK_FAILURE(args->GetDeferral(&deferral));
            m_completeDeferredDialog = [showDialog, deferral]
            {
                showDialog();
                CHECK_FAILURE(deferral->Complete());
            };
        }
        else
        {
            showDialog();
        }

        return S_OK;
    }).Get(), &m_scriptDialogOpeningToken));

add_SourceChanged

SourceChanged активируется при изменении свойства Source.

общедоступные значения HRESULT add_SourceChanged(ICoreWebView2SourceChangedEventHandler * eventHandler, EventRegistrationToken * token)

SourceChanged срабатывает для переходов на другой сайт или элементы навигации фрагментов. Она не будет срабатывать для других типов переходов, таких как перегрузка страниц или History. pushState с тем же URL-адресом, что и у текущей страницы. SourceChanged срабатывает перед ContentLoading для перехода к новому документу. Добавьте обработчик событий для события SourceChanged.

    // Register a handler for the SourceChanged event.
    // This handler will read the webview's source URI and update
    // the app's address bar.
    CHECK_FAILURE(m_webView->add_SourceChanged(
        Callback<ICoreWebView2SourceChangedEventHandler>(
            [this](ICoreWebView2* sender, ICoreWebView2SourceChangedEventArgs* args)
                -> HRESULT {
                wil::unique_cotaskmem_string uri;
                sender->get_Source(&uri);
                if (wcscmp(uri.get(), L"about:blank") == 0)
                {
                    uri = wil::make_cotaskmem_string(L"");
                }
                SetWindowText(GetAddressBar(), uri.get());

                return S_OK;
            })
            .Get(),
        &m_sourceChangedToken));

add_WebMessageReceived

Это событие срабатывает, если задан параметр IsWebMessageEnabled и документ верхнего уровня для вызовов WebView window.chrome.webview.postMessage .

общедоступные значения HRESULT add_WebMessageReceived(обработчикICoreWebView2WebMessageReceivedEventHandler *, EventRegistrationToken * token)

Функция i, в void postMessage(object) которой объект — это любой объект, поддерживаемый преобразованием JSON.

        window.chrome.webview.addEventListener('message', arg => {
            if ("SetColor" in arg.data) {
                document.getElementById("colorable").style.color = arg.data.SetColor;
            }
            if ("WindowBounds" in arg.data) {
                document.getElementById("window-bounds").value = arg.data.WindowBounds;
            }
        });

        function SetTitleText() {
            let titleText = document.getElementById("title-text");
            window.chrome.webview.postMessage(`SetTitleText ${titleText.value}`);
        }
        function GetWindowBounds() {
            window.chrome.webview.postMessage("GetWindowBounds");
        }

При вызове ICoreWebView2WebMessageReceivedEventHandler набор с помощью этого метода SetWebMessageReceivedEventHandler вызывается с помощью параметра объекта i, преобразованного в строку JSON.

    // Setup the web message received event handler before navigating to
    // ensure we don't miss any messages.
    CHECK_FAILURE(m_webView->add_WebMessageReceived(
        Microsoft::WRL::Callback<ICoreWebView2WebMessageReceivedEventHandler>(
            [this](ICoreWebView2* sender, ICoreWebView2WebMessageReceivedEventArgs* args)
    {
        wil::unique_cotaskmem_string uri;
        CHECK_FAILURE(args->get_Source(&uri));

        // Always validate that the origin of the message is what you expect.
        if (uri.get() != m_sampleUri)
        {
            return S_OK;
        }
        wil::unique_cotaskmem_string messageRaw;
        CHECK_FAILURE(args->TryGetWebMessageAsString(&messageRaw));
        std::wstring message = messageRaw.get();

        if (message.compare(0, 13, L"SetTitleText ") == 0)
        {
            m_appWindow->SetTitleText(message.substr(13).c_str());
        }
        else if (message.compare(L"GetWindowBounds") == 0)
        {
            RECT bounds = m_appWindow->GetWindowBounds();
            std::wstring reply =
                L"{\"WindowBounds\":\"Left:" + std::to_wstring(bounds.left)
                + L"\\nTop:" + std::to_wstring(bounds.top)
                + L"\\nRight:" + std::to_wstring(bounds.right)
                + L"\\nBottom:" + std::to_wstring(bounds.bottom)
                + L"\"}";
            CHECK_FAILURE(sender->PostWebMessageAsJson(reply.c_str()));
        }
        return S_OK;
    }).Get(), &m_webMessageReceivedToken));

add_WebResourceRequested

Добавьте обработчик событий для события WebResourceRequested.

общедоступные значения HRESULT add_WebResourceRequested(ICoreWebView2WebResourceRequestedEventHandler * eventHandler, EventRegistrationToken * token)

Активируется, когда WebView выполняет запрос URL-адреса к соответствующему URL-адресу и фильтру контекст ресурсов, добавленный с помощью AddWebResourceRequestedFilter. Для срабатывания события необходимо добавить хотя бы один фильтр.

        if (m_blockImages)
        {
            m_webView->AddWebResourceRequestedFilter(L"*", COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE);
            CHECK_FAILURE(m_webView->add_WebResourceRequested(
                Callback<ICoreWebView2WebResourceRequestedEventHandler>(
                    [this](
                        ICoreWebView2* sender,
                        ICoreWebView2WebResourceRequestedEventArgs* args) {
                        COREWEBVIEW2_WEB_RESOURCE_CONTEXT resourceContext;
                        CHECK_FAILURE(
                            args->get_ResourceContext(&resourceContext));
                        // Ensure that the type is image
                        if (resourceContext != COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE)
                        {
                            return E_INVALIDARG;
                        }
                        // Override the response with an empty one to block the image.
                        // If put_Response is not called, the request will continue as normal.
                        wil::com_ptr<ICoreWebView2WebResourceResponse> response;
                        CHECK_FAILURE(m_webViewEnvironment->CreateWebResourceResponse(
                            nullptr, 403 /*NoContent*/, L"Blocked", L"", &response));
                        CHECK_FAILURE(args->put_Response(response.get()));
                        return S_OK;
                    })
                    .Get(),
                &m_webResourceRequestedTokenForImageBlocking));
        }
        else
        {
            CHECK_FAILURE(m_webView->remove_WebResourceRequested(
                m_webResourceRequestedTokenForImageBlocking));
        }

add_WindowCloseRequested

Добавьте обработчик событий для события WindowCloseRequested.

общедоступные значения HRESULT add_WindowCloseRequested(ICoreWebView2WindowCloseRequestedEventHandler * eventHandler, EventRegistrationToken * token)

Вызывается, когда содержимое в WebView запрашивает закрытие окна, например после вызова Window. Close. Приложение должно закрыть окно WebView и связанное приложение, если это понятно приложению.

    // Register a handler for the WindowCloseRequested event.
    // This handler will close the app window if it is not the main window.
    CHECK_FAILURE(m_webView->add_WindowCloseRequested(
        Callback<ICoreWebView2WindowCloseRequestedEventHandler>([this](
                                                                    ICoreWebView2* sender,
                                                                    IUnknown* args) {
            if (m_isPopupWindow)
            {
                CloseAppWindow();
            }
            return S_OK;
        }).Get(),
        nullptr));

AddHostObjectToScript

Добавьте предоставленный объект узла в сценарий, выполняемый в WebView с указанным именем.

общедоступные значения HRESULT AddHostObjectToScript(имя LPCWSTR, переменная * объект)

Объекты узла предоставляются как прокси объекта hosts через window.chrome.webview.hostObjects.<name> . Прокси-серверы объектов являются обещанными и разрешаются в объект, представляющий объект Host. Обещание отклонено, если приложение не добавило объект с именем. Когда код JavaScript обращается к свойству или методу объекта, для него возвращается значение, которое будет обрабатываться в соответствии со значением, возвращенным из хоста для свойства или метода, или отброшено в случае ошибки, например, отсутствие такого свойства или метода для объекта или параметров недопустимым. Например, когда код приложения делает следующее:

VARIANT object;
object.vt = VT_DISPATCH;
object.pdispVal = appObject;
webview->AddHostObjectToScript(L"host_object", &host);

Код JavaScript в WebView сможет получить доступ к appObject следующим образом, а затем получить доступ к атрибутам и методам appObject:

let app_object = await window.chrome.webview.hostObjects.host_object;
let attr1 = await app_object.attr1;
let result = await app_object.method1(parameters);

Обратите внимание, что хотя простые типы, IDispatch и Array поддерживаются, универсальный IUnknown, VT_DECIMAL или VT_RECORD Variant не поддерживается. Удаленные объекты JavaScript, такие как функции обратного вызова, представлены как VT_DISPATCH VARIANT с помощью объекта, реализующего IDispatch. Метод обратного вызова JavaScript можно вызвать с помощью DISPID_VALUE для DISPID. Вложенные массивы поддерживаются до 3 уровней. Массивы по типам ссылок не поддерживаются. VT_EMPTY и VT_NULL сопоставлены в JavaScript как null. В JavaScript NULL и undefine сопоставляются с VT_EMPTY.

Кроме того, все объекты узла предоставляются как window.chrome.webview.hostObjects.sync.<name> . Здесь объекты узла предоставляются как синхронные прокси объектов узла. Эти функции не предназначены для того, чтобы синхронно блокировать выполняемые сценарии, ожидающие общения для запуска кода хоста. Таким образом, это может привести к проблемам с надежностью, поэтому рекомендуется использовать асинхронный API на основе Promise, window.chrome.webview.hostObjects.<name> описанный выше.

Синхронные прокси-серверы узлов и асинхронные прокси объектов узла могут обоим образом доявляться прокси для одного и того же объекта узла. Удаленные изменения, внесенные одним прокси-сервером, будут отражаться на любом другом прокси того же объекта узла, независимо от того, являются ли они другими прокси-объектами, синхронными или асинхронными.

Несмотря на то, что JavaScript блокируется на синхронный вызов машинного кода, этот машинный код не может снова вызвать JavaScript. При попытке выполнить это действие произойдет сбой с HRESULT_FROM_WIN32 (ERROR_POSSIBLE_DEADLOCK).

Прокси объектов узла — это прокси-объекты JavaScript, которые перехватывают все вызовы свойств Get, Set и Method. Свойства или методы, которые являются частью прототипа функции или объекта, выполняются локально. Кроме того, любое свойство или метод в массиве chrome.webview.hostObjects.options.forceLocalProperties также будет выполняться локально. Эти значения по умолчанию включают в себя дополнительные методы, которые имеют значение в JavaScript Like toJSON и Symbol.toPrimitive . При необходимости вы можете добавить в этот массив дополнительные сведения.

Существует метод chrome.webview.hostObjects.cleanupSome , который наилучшим способом является сбор прокси объектов хоста сборщиком мусора.

Прокси-серверы узла дополнительно обладают следующими методами, которые выполняются локально.

  • applyHostFunction, getHostProperty, setHostProperty: выполняйте вызов метода, свойство get или свойство Set для объекта Host. Вы можете использовать их, чтобы явным образом запускать метод или свойство, если существует конфликтующий локальный метод или свойство. Например, proxy.toString() будет выполнен локальный метод ToString для прокси-объекта. Но proxy.applyHostFunction('toString') выполняется toString вместо объекта прокси-сервера узла.

  • getLocalProperty, setLocalProperty: выполнение свойства Get или установка свойства локально. Эти методы можно использовать, чтобы принудительно получить или задать свойство для прокси объекта основного приложения, а не для объекта узла, который он представляет. Например, proxy.unknownProperty будет получено свойство с именем unknownProperty из объекта прокси-сервера узла. Но proxy.getLocalProperty('unknownProperty') будет получить значение свойства unknownProperty для самого объекта прокси.

  • Sync: асинхронные прокси-серверы узлов предоставляют метод Sync, возвращающий обещание для прокси объекта хоста синхронный для одного и того же объекта узла. Например, chrome.webview.hostObjects.sample.methodCall() возвращает асинхронный прокси объекта хоста. Вы можете использовать этот sync метод, чтобы получить для него синхронный прокси-сервер объекта узла: const syncProxy = await chrome.webview.hostObjects.sample.methodCall().sync()

  • Async: синхронные прокси-серверы узлов предоставляют асинхронный метод, который блокирует и возвращает асинхронный прокси объекта хоста для одного и того же объекта узла. Например, chrome.webview.hostObjects.sync.sample.methodCall() возвращает синхронный прокси объекта узла. Вызов async метода на этих блоках и возврат прокси-сервера асинхронного объекта узла для того же объекта узла: const asyncProxy = chrome.webview.hostObjects.sync.sample.methodCall().async()

  • затем: асинхронные прокси-объекты узла имеют метод then. Это позволит им доставлять ожидающие. then будет возвращать обещание, которое разрешается с представлением объекта Host. Если прокси представляет литерал JavaScript, то копия, возвращаемая им, будет возвращена локально. Если прокси представляет функцию, возвращается прокси-сервер, не ожидающий ожидания. Если прокси представляет объект JavaScript с сочетанием литеральных свойств и свойств функций, то копия объекта возвращается с некоторыми свойствами в качестве прокси объектов Host.

Все другие вызовы свойств и методов (Кроме описанных выше методов прокси-сервера удаленного объекта, списка forceLocalProperties и свойств прототипов функций и объектов) выполняются удаленно. Асинхронные прокси-объекты узла возвращают обещание, представляющее собой асинхронное завершение удаленного вызова метода или получение свойства. Обещание устраняется после завершения удаленных операций, и обещание разрешается в полученное значение операции. Синхронные прокси объекта узла работают одинаково, но блокируют выполнение JavaScript и дождитесь завершения удаленной операции.

Установка свойства для прокси-сервера асинхронного узла выполняется немного по-другому. Функция Set возвращает значение немедленно и возвращаемое значение является значением, которое будет задано. Это требование для прокси-объекта JavaScript. Если необходимо асинхронно дождаться завершения установки свойства, используйте метод setHostProperty, который возвращает обещание, как описано выше. Синхронно заданное свойство свойства объекта для синхронно блокируется, пока не задано свойство.

Например, предположим, что у вас есть COM-объект со следующим интерфейсом

    [uuid(3a14c9c0-bc3e-453f-a314-4ce4a0ec81d8), object, local]
    interface IHostObjectSample : IUnknown
    {
        // Demonstrate basic method call with some parameters and a return value.
        HRESULT MethodWithParametersAndReturnValue([in] BSTR stringParameter, [in] INT integerParameter, [out, retval] BSTR* stringResult);

        // Demonstrate getting and setting a property.
        [propget] HRESULT Property([out, retval] BSTR* stringResult);
        [propput] HRESULT Property([in] BSTR stringValue);

        [propget] HRESULT IndexedProperty(INT index, [out, retval] BSTR * stringResult);
        [propput] HRESULT IndexedProperty(INT index, [in] BSTR stringValue);

        // Demonstrate native calling back into JavaScript.
        HRESULT CallCallbackAsynchronously([in] IDispatch* callbackParameter);

    };

Мы можем добавить экземпляр этого интерфейса в наш сценарий JavaScript AddHostObjectToScript . В этом случае мы присвойте ему имя sample :

            VARIANT remoteObjectAsVariant = {};
            m_hostObject.query_to<IDispatch>(&remoteObjectAsVariant.pdispVal);
            remoteObjectAsVariant.vt = VT_DISPATCH;

            // We can call AddHostObjectToScript multiple times in a row without
            // calling RemoveHostObject first. This will replace the previous object
            // with the new object. In our case this is the same object and everything
            // is fine.
            CHECK_FAILURE(
                m_webView->AddHostObjectToScript(L"sample", &remoteObjectAsVariant));
            remoteObjectAsVariant.pdispVal->Release();

Затем в HTML-документе мы можем использовать этот COM-объект через chrome.webview.hostObjects.sample :

        document.getElementById("getPropertyAsyncButton").addEventListener("click", async () => {
        const propertyValue = await chrome.webview.hostObjects.sample.property;
        document.getElementById("getPropertyAsyncOutput").textContent = propertyValue;
        });

        document.getElementById("getPropertySyncButton").addEventListener("click", () => {
        const propertyValue = chrome.webview.hostObjects.sync.sample.property;
        document.getElementById("getPropertySyncOutput").textContent = propertyValue;
        });

        document.getElementById("setPropertyAsyncButton").addEventListener("click", async () => {
        const propertyValue = document.getElementById("setPropertyAsyncInput").value;
        // The following line will work but it will return immediately before the property value has actually been set.
        // If you need to set the property and wait for the property to change value, use the setRemote function.
        chrome.webview.hostObjects.sample.property = propertyValue;
        document.getElementById("setPropertyAsyncOutput").textContent = "Set";
        });

        document.getElementById("setPropertyExplicitAsyncButton").addEventListener("click", async () => {
        const propertyValue = document.getElementById("setPropertyExplicitAsyncInput").value;
        // If you care about waiting until the property has actually changed value use the setRemote function.
        await chrome.webview.hostObjects.sample.setRemote("property", propertyValue);
        document.getElementById("setPropertyExplicitAsyncOutput").textContent = "Set";
        });

        document.getElementById("setPropertySyncButton").addEventListener("click", () => {
        const propertyValue = document.getElementById("setPropertySyncInput").value;
        chrome.webview.hostObjects.sync.sample.property = propertyValue;
        document.getElementById("setPropertySyncOutput").textContent = "Set";
        });

        document.getElementById("getIndexedPropertyAsyncButton").addEventListener("click", async () => {
        const index = parseInt(document.getElementById("getIndexedPropertyAsyncParam").value);
        const resultValue = await chrome.webview.hostObjects.sample.IndexedProperty[index];
        document.getElementById("getIndexedPropertyAsyncOutput").textContent = resultValue;
        });
        document.getElementById("setIndexedPropertyAsyncButton").addEventListener("click", async () => {
        const index = parseInt(document.getElementById("setIndexedPropertyAsyncParam1").value);
        const value = document.getElementById("setIndexedPropertyAsyncParam2").value;;
        chrome.webview.hostObjects.sample.IndexedProperty[index] = value;
        document.getElementById("setIndexedPropertyAsyncOutput").textContent = "Set";
        });
        document.getElementById("invokeMethodAsyncButton").addEventListener("click", async () => {
        const paramValue1 = document.getElementById("invokeMethodAsyncParam1").value;
        const paramValue2 = parseInt(document.getElementById("invokeMethodAsyncParam2").value);
        const resultValue = await chrome.webview.hostObjects.sample.MethodWithParametersAndReturnValue(paramValue1, paramValue2);
        document.getElementById("invokeMethodAsyncOutput").textContent = resultValue;
        });

        document.getElementById("invokeMethodSyncButton").addEventListener("click", () => {
        const paramValue1 = document.getElementById("invokeMethodSyncParam1").value;
        const paramValue2 = parseInt(document.getElementById("invokeMethodSyncParam2").value);
        const resultValue = chrome.webview.hostObjects.sync.sample.MethodWithParametersAndReturnValue(paramValue1, paramValue2);
        document.getElementById("invokeMethodSyncOutput").textContent = resultValue;
        });

        let callbackCount = 0;
        document.getElementById("invokeCallbackButton").addEventListener("click", async () => {
        chrome.webview.hostObjects.sample.CallCallbackAsynchronously(() => {
        document.getElementById("invokeCallbackOutput").textContent = "Native object called the callback " + (++callbackCount) + " time(s).";
        });
        });

Предоставление доступа к объектам узла для сценария имеет угрозу безопасности. Пожалуйста, следуйте рекомендациям.

AddScriptToExecuteOnDocumentCreated

Добавьте предоставленный JavaScript в список сценариев, которые должны выполняться после создания глобального объекта, но до начала синтаксического анализа HTML-документа и перед выполнением любого другого сценария, включенного в документ HTML.

общедоступные значения HRESULT AddScriptToExecuteOnDocumentCreated(LPCWSTR JavaScript, ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler * обработчик)

Этот метод вставляет сценарий, который запускается на всех документах верхнего уровня и дочерних переходах между страницами фреймов. Этот метод выполняется асинхронно, и вы должны дождаться завершения обработчика завершения перед тем, как вставленный сценарий будет готов к выполнению. Когда этот метод завершает работу, метод обработчика Invoke вызывается с использованием id вставленного сценария. id является строкой. Чтобы удалить вставленный сценарий, используйте RemoveScriptToExecuteOnDocumentCreated .

Обратите внимание, что если в HTML-документе есть изолированная Среда с определенными свойствами или заголовок HTTP Content-Security-Policy , это повлияет на выполнение сценария. Таким образом, например, если ключевое слово "Allow-Modal" не задано, вызовы alert функции будут игнорироваться.

// Prompt the user for some script and register it to execute whenever a new page loads.
void ScriptComponent::AddInitializeScript()
{
    TextInputDialog dialog(
        m_appWindow->GetMainWindow(),
        L"Add Initialize Script",
        L"Initialization Script:",
        L"Enter the JavaScript code to run as the initialization script that "
            L"runs before any script in the HTML document.",
    // This example script stops child frames from opening new windows.  Because
    // the initialization script runs before any script in the HTML document, we
    // can trust the results of our checks on window.parent and window.top.
        L"if (window.parent !== window.top) {\r\n"
        L"    delete window.open;\r\n"
        L"}");
    if (dialog.confirmed)
    {
        m_webView->AddScriptToExecuteOnDocumentCreated(
            dialog.input.c_str(),
            Callback<ICoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler>(
                [this](HRESULT error, PCWSTR id) -> HRESULT
        {
            m_lastInitializeScriptId = id;
            MessageBox(nullptr, id, L"AddScriptToExecuteOnDocumentCreated Id", MB_OK);
            return S_OK;
        }).Get());

    }
}

AddWebResourceRequestedFilter

Добавляет в событие WebResourceRequested код URI и фильтр контекста ресурсов.

общедоступный HRESULT AddWebResourceRequestedFilter(LPCWSTR const uri, COREWEBVIEW2_WEB_RESOURCE_CONTEXT const разделе ResourceContext)

Параметр URI может быть строкой с подстановочными знаками ("": ноль или больше; "?": только один). nullptr эквивалентен L "". Описание фильтров контекста ресурсов приведено в разделе COREWEBVIEW2_WEB_RESOURCE_CONTEXT перечисление.

CallDevToolsProtocolMethod

Вызовите асинхронный метод DevToolsProtocol.

общедоступные значения HRESULT CallDevToolsProtocolMethod(LPCWSTR METHODNAME, LPCWSTR ParametersAsJson, ICoreWebView2CallDevToolsProtocolMethodCompletedHandler * handler)

Список и описание доступных методов можно найти в средстве просмотра протокола DevTools . Параметр methodName — это полное имя метода в формате {domain}.{method} . Параметр parametersAsJson является строкой в формате JSON, содержащей параметры соответствующего метода. Метод Invoke обработчика вызывается, когда метод асинхронно завершается. Вызов Invoke будет вызываться с возвращаемым методом объектом в виде строки JSON.

// Prompt the user for the name and parameters of a CDP method, then call it.
void ScriptComponent::CallCdpMethod()
{
    TextInputDialog dialog(
        m_appWindow->GetMainWindow(),
        L"Call CDP Method",
        L"CDP method name:",
        L"Enter the CDP method name to call, followed by a space,\r\n"
            L"followed by the parameters in JSON format.",
        L"Runtime.evaluate {\"expression\":\"alert(\\\"test\\\")\"}");
    if (dialog.confirmed)
    {
        size_t delimiterPos = dialog.input.find(L' ');
        std::wstring methodName = dialog.input.substr(0, delimiterPos);
        std::wstring methodParams =
            (delimiterPos < dialog.input.size()
                ? dialog.input.substr(delimiterPos + 1)
                : L"{}");

        m_webView->CallDevToolsProtocolMethod(
            methodName.c_str(),
            methodParams.c_str(),
            Callback<ICoreWebView2CallDevToolsProtocolMethodCompletedHandler>(
                [](HRESULT error, PCWSTR resultJson) -> HRESULT
                {
                    MessageBox(nullptr, resultJson, L"CDP Method Result", MB_OK);
                    return S_OK;
                }).Get());
    }
}

CapturePreview

Запишите изображение того, что WebView на экране.

Public HRESULT CapturePreview(COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT ImageFormat, IStream * ImageStream, ICoreWebView2CapturePreviewCompletedHandler * обработчик)

Укажите формат изображения с помощью параметра imageFormat. Результирующие двоичные данные изображения записываются в указанный параметр imageStream. Когда CapturePreview закончит запись в поток, вызывается метод Invoke в указанном параметре обработчика.

// Show the user a file selection dialog, then save a screenshot of the WebView
// to the selected file.
void FileComponent::SaveScreenshot()
{
    OPENFILENAME openFileName = {};
    openFileName.lStructSize = sizeof(openFileName);
    openFileName.hwndOwner = nullptr;
    openFileName.hInstance = nullptr;
    WCHAR fileName[MAX_PATH] = L"WebView2_Screenshot.png";
    openFileName.lpstrFile = fileName;
    openFileName.lpstrFilter = L"PNG File\0*.png\0";
    openFileName.nMaxFile = ARRAYSIZE(fileName);
    openFileName.Flags = OFN_OVERWRITEPROMPT;

    if (GetSaveFileName(&openFileName))
    {
        wil::com_ptr<IStream> stream;
        CHECK_FAILURE(SHCreateStreamOnFileEx(
            fileName, STGM_READWRITE | STGM_CREATE, FILE_ATTRIBUTE_NORMAL, TRUE, nullptr,
            &stream));

        HWND mainWindow = m_appWindow->GetMainWindow();

        CHECK_FAILURE(m_webView->CapturePreview(
            COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG, stream.get(),
            Callback<ICoreWebView2CapturePreviewCompletedHandler>(
                [mainWindow](HRESULT error_code) -> HRESULT {
                    CHECK_FAILURE(error_code);

                    MessageBox(mainWindow, L"Preview Captured", L"Preview Captured", MB_OK);
                    return S_OK;
                })
                .Get()));
    }
}

ExecuteScript

Выполнение кода JavaScript из параметра JavaScript в текущем документе верхнего уровня, отображаемом в WebView.

общедоступные значения HRESULT ExecuteScript(LPCWSTR JavaScript, ICoreWebView2ExecuteScriptCompletedHandler * обработчик)

Это выполняется асинхронно и по завершении, если обработчик предоставлен в параметре ExecuteScriptCompletedHandler, вызывается его метод Invoke с результатом вычисления предоставленного JavaScript. Результирующее значение — это строка в кодировке JSON. Если результат не определен, содержит цикл ссылки или не может быть закодирован в JSON, значение NULL JSON будет возвращено в виде строки null. Обратите внимание, что функция без явного возвращаемого значения возвращает значение undefine. Если выполняемый сценарий создает необработанное исключение, результат также равен null. Этот метод применяется асинхронно. Если метод вызывается после события NavigationStarting во время навигации, сценарий будет выполнен в новом документе при его загрузке, вокруг которого возникает время ContentLoading. ExecuteScript будет работать даже в том случае, если IsScriptEnabled имеет значение FALSE.

// Prompt the user for some script and then execute it.
void ScriptComponent::InjectScript()
{
    TextInputDialog dialog(
        m_appWindow->GetMainWindow(),
        L"Inject Script",
        L"Enter script code:",
        L"Enter the JavaScript code to run in the webview.",
        L"window.getComputedStyle(document.body).backgroundColor");
    if (dialog.confirmed)
    {
        m_webView->ExecuteScript(dialog.input.c_str(),
            Callback<ICoreWebView2ExecuteScriptCompletedHandler>(
                [](HRESULT error, PCWSTR result) -> HRESULT
        {
            if (error != S_OK) {
                ShowFailure(error, L"ExecuteScript failed");
            }
            MessageBox(nullptr, result, L"ExecuteScript Result", MB_OK);
            return S_OK;
        }).Get());
    }
}

get_BrowserProcessId

Идентификатор процесса браузера, на котором размещается WebView.

общедоступные значения HRESULT get_BrowserProcessId(UINT32 * Value)

get_CanGoBack

Возвращает значение "истина", если WebView может перейти к предыдущей странице в журнале переходов.

общедоступные значения HRESULT get_CanGoBack(bool * CanGoBack)

Событие HistoryChanged будет срабатывать, если CanGoBack изменит значение.

get_CanGoForward

Возвращает значение "истина", если WebView может перейти к следующей странице в журнале переходов.

общедоступные значения HRESULT get_CanGoForward(bool * CanGoForward)

Событие HistoryChanged будет срабатывать, если CanGoForward изменит значение.

get_ContainsFullScreenElement

Указывает, содержит ли WebView элемент HTML на весь экран.

общедоступные значения HRESULT get_ContainsFullScreenElement(bool * ContainsFullScreenElement)

get_DocumentTitle

Название текущего документа верхнего уровня.

общедоступные значения HRESULT get_DocumentTitle(LPWSTR * Title)

Если документ не имеет явного заголовка или не является пустым, используется значение по умолчанию, которое может быть или не совпадать с URI документа.

get_Settings

Объект ICoreWebView2Settings , содержащий различные изменяемые параметры для запущенного WebView.

общедоступные значения HRESULT get_Settings(ICoreWebView2Settings * * параметры)

get_Source

Универсальный код ресурса (URI) текущего документа верхнего уровня.

общедоступные значения HRESULT get_Source(LPWSTR * URI)

Это значение может изменяться в рамках обработки события SourceChanged в некоторых случаях, например при переходе к другому сайту или для навигации по фрагменту. Оно останется прежним для других типов переходов, таких как перегрузка страниц или History. pushState с тем же URL-адресом, что и у текущей страницы.

    // Register a handler for the SourceChanged event.
    // This handler will read the webview's source URI and update
    // the app's address bar.
    CHECK_FAILURE(m_webView->add_SourceChanged(
        Callback<ICoreWebView2SourceChangedEventHandler>(
            [this](ICoreWebView2* sender, ICoreWebView2SourceChangedEventArgs* args)
                -> HRESULT {
                wil::unique_cotaskmem_string uri;
                sender->get_Source(&uri);
                if (wcscmp(uri.get(), L"about:blank") == 0)
                {
                    uri = wil::make_cotaskmem_string(L"");
                }
                SetWindowText(GetAddressBar(), uri.get());

                return S_OK;
            })
            .Get(),
        &m_sourceChangedToken));

GetDevToolsProtocolEventReceiver

Получение приемника событий протокола DevTools, который позволяет подписаться на событие протокола DevTools.

общедоступные значения HRESULT GetDevToolsProtocolEventReceiver(LPCWSTR eventName, ICoreWebView2DevToolsProtocolEventReceiver * * ресивер)

Параметр eventName — это полное имя события в формате {domain}.{event} . Список событий протоколов DevTools и аргументов событий можно найти в средстве просмотра протокола DevTools .

// Prompt the user to name a CDP event, and then subscribe to that event.
void ScriptComponent::SubscribeToCdpEvent()
{
    TextInputDialog dialog(
        m_appWindow->GetMainWindow(),
        L"Subscribe to CDP Event",
        L"CDP event name:",
        L"Enter the name of the CDP event to subscribe to.\r\n"
            L"You may also have to call the \"enable\" method of the\r\n"
            L"event's domain to receive events (for example \"Log.enable\").\r\n",
        L"Log.entryAdded");
    if (dialog.confirmed)
    {
        std::wstring eventName = dialog.input;
        wil::com_ptr<ICoreWebView2DevToolsProtocolEventReceiver> receiver;
        CHECK_FAILURE(
            m_webView->GetDevToolsProtocolEventReceiver(eventName.c_str(), &receiver));

        // If we are already subscribed to this event, unsubscribe first.
        auto preexistingToken = m_devToolsProtocolEventReceivedTokenMap.find(eventName);
        if (preexistingToken != m_devToolsProtocolEventReceivedTokenMap.end())
        {
            CHECK_FAILURE(receiver->remove_DevToolsProtocolEventReceived(
                preexistingToken->second));
        }

        CHECK_FAILURE(receiver->add_DevToolsProtocolEventReceived(
            Callback<ICoreWebView2DevToolsProtocolEventReceivedEventHandler>(
                [eventName](
                    ICoreWebView2* sender,
                    ICoreWebView2DevToolsProtocolEventReceivedEventArgs* args) -> HRESULT {
                    wil::unique_cotaskmem_string parameterObjectAsJson;
                    CHECK_FAILURE(args->get_ParameterObjectAsJson(&parameterObjectAsJson));
                    MessageBox(
                        nullptr, parameterObjectAsJson.get(),
                        (L"CDP Event Fired: " + eventName).c_str(), MB_OK);
                    return S_OK;
                })
                .Get(),
            &m_devToolsProtocolEventReceivedTokenMap[eventName]));
    }
}

GoBack

Переход по WebView на предыдущую страницу в истории навигации.

общедоступное значение HRESULT GoBack()

GoForward

Переход по WebView к следующей странице в истории навигации.

общедоступные значения HRESULT GoForward()

Которому

Применяет навигацию по документу верхнего уровня к указанному универсальному коду ресурса (URI).

общедоступное значение HRESULT навигации(URI LPCWSTR)

Дополнительные сведения приведены в разделе события навигации. Обратите внимание, что при этом начинается переход и соответствующее событие NavigationStarting будет срабатывать после завершения этого вызова навигации.

void ControlComponent::NavigateToAddressBar()
{
    int length = GetWindowTextLength(GetAddressBar());
    std::wstring uri(length, 0);
    PWSTR buffer = const_cast<PWSTR>(uri.data());
    GetWindowText(GetAddressBar(), buffer, length + 1);

    HRESULT hr = m_webView->Navigate(uri.c_str());
    if (hr == E_INVALIDARG)
    {
        // An invalid URI was provided.
        if (uri.find(L' ') == std::wstring::npos
            && uri.find(L'.') != std::wstring::npos)
        {
            // If it contains a dot and no spaces, try tacking http:// on the front.
            hr = m_webView->Navigate((L"http://" + uri).c_str());
        }
        else
        {
            // Otherwise treat it as a web search. We aren't bothering to escape
            // URL syntax characters such as & and #
            hr = m_webView->Navigate((L"https://bing.com/search?q=" + uri).c_str());
        }
    }
    if (hr != E_INVALIDARG) {
        CHECK_FAILURE(hr);
    }
}

Запускает навигацию для htmlContent в качестве исходного HTML-кода нового документа.

общедоступные значения HRESULT NavigateToString(LPCWSTR htmlContent)

Параметр htmlContent не может быть больше 2 МБ символов. В качестве источника новой страницы будет указано пустое значение.

            static const PCWSTR htmlContent =
              L"<h1>Domain Blocked</h1>"
              L"<p>You've attempted to navigate to a domain in the blocked "
              L"sites list. Press back to return to the previous page.</p>";
            CHECK_FAILURE(sender->NavigateToString(htmlContent));

OpenDevToolsWindow

Открытие окна DevTools для текущего документа в WebView.

общедоступные значения HRESULT OpenDevToolsWindow()

Ничего не происходит, если он вызывается, когда окно DevTools уже открыто

PostWebMessageAsJson

Опубликуйте указанное сообщение в документе верхнего уровня в этом WebView.

общедоступные значения HRESULT PostWebMessageAsJson(LPCWSTR webMessageAsJson)

Срабатывает событие Window. Chrome. WebView для документа верхнего уровня. JavaScript в этом документе может подписываться на событие и отменять подписку с помощью следующих действий:

window.chrome.webview.addEventListener('message', handler)
window.chrome.webview.removeEventListener('message', handler)

Аргументы события представляют собой экземпляр MessageEvent . Параметр ICoreWebView2Settings:: IsWebMessageEnabled должен быть истинным, или этот метод завершится сбоем с E_INVALIDARG. Свойство данных аргумента "событие" — это строковый параметр веб-сообщения, проанализированный как строка JSON, в объект JavaScript. Свойство Source аргумента "событие" является ссылкой на window.chrome.webview объект. Сведения о том, как отправлять сообщения из HTML-документа на WebView на узел, можно найти в SetWebMessageReceivedEventHandler. Это сообщение отправляется асинхронно. Если переход выполняется до того, как сообщение будет отправлено на страницу, оно не будет отправлено.

    // Setup the web message received event handler before navigating to
    // ensure we don't miss any messages.
    CHECK_FAILURE(m_webView->add_WebMessageReceived(
        Microsoft::WRL::Callback<ICoreWebView2WebMessageReceivedEventHandler>(
            [this](ICoreWebView2* sender, ICoreWebView2WebMessageReceivedEventArgs* args)
    {
        wil::unique_cotaskmem_string uri;
        CHECK_FAILURE(args->get_Source(&uri));

        // Always validate that the origin of the message is what you expect.
        if (uri.get() != m_sampleUri)
        {
            return S_OK;
        }
        wil::unique_cotaskmem_string messageRaw;
        CHECK_FAILURE(args->TryGetWebMessageAsString(&messageRaw));
        std::wstring message = messageRaw.get();

        if (message.compare(0, 13, L"SetTitleText ") == 0)
        {
            m_appWindow->SetTitleText(message.substr(13).c_str());
        }
        else if (message.compare(L"GetWindowBounds") == 0)
        {
            RECT bounds = m_appWindow->GetWindowBounds();
            std::wstring reply =
                L"{\"WindowBounds\":\"Left:" + std::to_wstring(bounds.left)
                + L"\\nTop:" + std::to_wstring(bounds.top)
                + L"\\nRight:" + std::to_wstring(bounds.right)
                + L"\\nBottom:" + std::to_wstring(bounds.bottom)
                + L"\"}";
            CHECK_FAILURE(sender->PostWebMessageAsJson(reply.c_str()));
        }
        return S_OK;
    }).Get(), &m_webMessageReceivedToken));

PostWebMessageAsString

Это вспомогательный объект для отправки сообщения, которое является простой строкой, а не строкой JSON-представления объекта JavaScript.

общедоступные значения HRESULT PostWebMessageAsString(LPCWSTR webMessageAsString)

Это выполняется точно так же, как и PostWebMessageAsJson, но window.chrome.webview свойство Data события ARG имеет строковое значение с тем же значением, что и webMessageAsString. Используйте это вместо PostWebMessageAsJson, если вы хотите общаться с помощью простых строк, а не объектов JSON.

Перезагрузить

Перезагрузите текущую страницу.

общедоступная ПерезагрузкаHRESULT ()

Это похоже на то, что переход к URI текущего документа верхнего уровня, включая все события навигации, которые обрабатывались, и учитывает любые записи в кэше HTTP. Но история «назад» и «вперед» не будет изменена.

remove_ContainsFullScreenElementChanged

Удалите обработчик событий, добавленный ранее с помощью соответствующего метода события add_.

общедоступные значения HRESULT remove_ContainsFullScreenElementChanged(маркер EventRegistrationToken)

remove_ContentLoading

Удалите обработчик событий, добавленный ранее add_ContentLoading.

общедоступные значения HRESULT remove_ContentLoading(маркер EventRegistrationToken)

remove_DocumentTitleChanged

Удалите обработчик событий, добавленный ранее add_DocumentTitleChanged.

общедоступные значения HRESULT remove_DocumentTitleChanged(маркер EventRegistrationToken)

remove_FrameNavigationCompleted

Удалите обработчик событий, добавленный ранее add_FrameNavigationCompleted.

общедоступные значения HRESULT remove_FrameNavigationCompleted(маркер EventRegistrationToken)

remove_FrameNavigationStarting

Удалите обработчик событий, добавленный ранее add_FrameNavigationStarting.

общедоступные значения HRESULT remove_FrameNavigationStarting(маркер EventRegistrationToken)

remove_HistoryChanged

Удалите обработчик событий, добавленный ранее add_HistoryChanged.

общедоступные значения HRESULT remove_HistoryChanged(маркер EventRegistrationToken)

remove_NavigationCompleted

Удалите обработчик событий, добавленный ранее add_NavigationCompleted.

общедоступные значения HRESULT remove_NavigationCompleted(маркер EventRegistrationToken)

remove_NavigationStarting

Удалите обработчик событий, добавленный ранее add_NavigationStarting.

общедоступные значения HRESULT remove_NavigationStarting(маркер EventRegistrationToken)

remove_NewWindowRequested

Удалите обработчик событий, добавленный ранее add_NewWindowRequested.

общедоступные значения HRESULT remove_NewWindowRequested(маркер EventRegistrationToken)

remove_PermissionRequested

Удалите обработчик событий, добавленный ранее add_PermissionRequested.

общедоступные значения HRESULT remove_PermissionRequested(маркер EventRegistrationToken)

remove_ProcessFailed

Удалите обработчик событий, добавленный ранее add_ProcessFailed.

общедоступные значения HRESULT remove_ProcessFailed(маркер EventRegistrationToken)

remove_ScriptDialogOpening

Удалите обработчик событий, добавленный ранее add_ScriptDialogOpening.

общедоступные значения HRESULT remove_ScriptDialogOpening(маркер EventRegistrationToken)

remove_SourceChanged

Удалите обработчик событий, добавленный ранее add_SourceChanged.

общедоступные значения HRESULT remove_SourceChanged(маркер EventRegistrationToken)

remove_WebMessageReceived

Удалите обработчик событий, добавленный ранее add_WebMessageReceived.

общедоступные значения HRESULT remove_WebMessageReceived(маркер EventRegistrationToken)

remove_WebResourceRequested

Удалите обработчик событий, добавленный ранее add_WebResourceRequested.

общедоступные значения HRESULT remove_WebResourceRequested(маркер EventRegistrationToken)

remove_WindowCloseRequested

Удалите обработчик событий, добавленный ранее add_WindowCloseRequested.

общедоступные значения HRESULT remove_WindowCloseRequested(маркер EventRegistrationToken)

RemoveHostObjectFromScript

Удалите объект узла, заданный именем, чтобы он больше не будет доступен из кода JavaScript в WebView.

общедоступное значение HRESULT RemoveHostObjectFromScript(имя LPCWSTR)

Несмотря на то что новые попытки доступа будут отвергнуты, если объект уже получен кодом JavaScript в WebView, код JavaScript продолжит получать доступ к этому объекту. Вызов этого метода для имени, которое уже удалено или не было добавлено, завершается сбоем.

RemoveScriptToExecuteOnDocumentCreated

Удалите соответствующий сценарий JavaScript, который добавляется с использованием AddScriptToExecuteOnDocumentCreated указанного идентификатора сценария.

общедоступные значения HRESULT RemoveScriptToExecuteOnDocumentCreated(ИД LPCWSTR)

RemoveWebResourceRequestedFilter

Удаляет соответствующий фильтр веб-ресурсов, который ранее был добавлен для события WebResourceRequested.

общедоступный HRESULT RemoveWebResourceRequestedFilter(LPCWSTR const uri, COREWEBVIEW2_WEB_RESOURCE_CONTEXT const разделе ResourceContext)

Если один и тот же фильтр был добавлен несколько значений, его необходимо будет удалить столько, сколько вхождений было добавлено для эффективного. Возвращает E_INVALIDARG для фильтра, который еще не был добавлен.

Stop

Остановите все переходы и ожидающие выборки ресурсов.

открытая ОстановкаHRESULT ()

Не останавливает сценарии.

COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT

Формат изображения, используемый в методе ICoreWebView2:: CapturePreview.

COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT перечисления

Данные Описания
COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_PNG Формат изображения PNG.
COREWEBVIEW2_CAPTURE_PREVIEW_IMAGE_FORMAT_JPEG Формат изображения JPEG.

COREWEBVIEW2_KEY_EVENT_KIND

Тип события клавиши, которое инициировало событие AcceleratorKeyPressed.

COREWEBVIEW2_KEY_EVENT_KIND перечисления

Данные Описания
COREWEBVIEW2_KEY_EVENT_KIND_KEY_DOWN ВыWM_KEYDOWN сообщение в окне.
COREWEBVIEW2_KEY_EVENT_KIND_KEY_UP ВыWM_KEYUP сообщение в окне.
COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_DOWN ВыWM_SYSKEYDOWN сообщение в окне.
COREWEBVIEW2_KEY_EVENT_KIND_SYSTEM_KEY_UP ВыWM_SYSKEYUP сообщение в окне.

COREWEBVIEW2_MOVE_FOCUS_REASON

Причина для перемещения фокуса.

COREWEBVIEW2_MOVE_FOCUS_REASON перечисления

Данные Описания
COREWEBVIEW2_MOVE_FOCUS_REASON_PROGRAMMATIC Настройка кода фокуса на WebView.
COREWEBVIEW2_MOVE_FOCUS_REASON_NEXT Перемещение фокуса из-за прохождения вкладки вперед.
COREWEBVIEW2_MOVE_FOCUS_REASON_PREVIOUS Перемещение фокуса из-за перемещения по табуляции назад.

COREWEBVIEW2_PERMISSION_KIND

Тип запроса разрешения.

COREWEBVIEW2_PERMISSION_KIND перечисления

Данные Описания
COREWEBVIEW2_PERMISSION_KIND_UNKNOWN_PERMISSION Неизвестное разрешение.
COREWEBVIEW2_PERMISSION_KIND_MICROPHONE Разрешение на запись звука.
COREWEBVIEW2_PERMISSION_KIND_CAMERA Разрешение на захват видео.
COREWEBVIEW2_PERMISSION_KIND_GEOLOCATION Разрешение на доступ к географической позиции.
COREWEBVIEW2_PERMISSION_KIND_NOTIFICATIONS Разрешение на отправку веб-уведомлений.
COREWEBVIEW2_PERMISSION_KIND_OTHER_SENSORS Разрешение на доступ к универсальному датчику.
COREWEBVIEW2_PERMISSION_KIND_CLIPBOARD_READ Разрешение на чтение системного буфера обмена без жеста пользователя.

COREWEBVIEW2_PERMISSION_STATE

Ответ на запрос разрешения.

COREWEBVIEW2_PERMISSION_STATE перечисления

Данные Описания
COREWEBVIEW2_PERMISSION_STATE_DEFAULT Используйте поведение браузера по умолчанию, которое обычно запрашивает у пользователей решение.
COREWEBVIEW2_PERMISSION_STATE_ALLOW Предоставьте разрешение на запрос.
COREWEBVIEW2_PERMISSION_STATE_DENY Отказ от запроса разрешения.

COREWEBVIEW2_PHYSICAL_KEY_STATUS

Структура, представляющая данные, Упакованные в LPARAM, предоставленные событию ключа Win32.

typedef COREWEBVIEW2_PHYSICAL_KEY_STATUS

Подробные сведения об WM_KEYDOWN вы увидите в документации по адресу https://docs.microsoft.com/windows/win32/inputdev/wm-keydown

COREWEBVIEW2_PROCESS_FAILED_KIND

Состояние сбоя процесса, используемого в интерфейсе ICoreWebView2ProcessFailedEventHandler.

COREWEBVIEW2_PROCESS_FAILED_KIND перечисления

Данные Описания
COREWEBVIEW2_PROCESS_FAILED_KIND_BROWSER_PROCESS_EXITED Указывает, что процесс браузера неожиданно завершился.
COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_EXITED Указывает, что процесс обработки неожиданно завершился.
COREWEBVIEW2_PROCESS_FAILED_KIND_RENDER_PROCESS_UNRESPONSIVE Указывает на то, что процесс рендеринга перестает отвечать на запросы.

COREWEBVIEW2_SCRIPT_DIALOG_KIND

Диалоговое окно вида JavaScript, используемое в интерфейсе ICoreWebView2ScriptDialogOpeningEventHandler.

COREWEBVIEW2_SCRIPT_DIALOG_KIND перечисления

Данные Описания
COREWEBVIEW2_SCRIPT_DIALOG_KIND_ALERT Диалоговое окно, вызываемое с помощью функции Window. Alert JavaScript.
COREWEBVIEW2_SCRIPT_DIALOG_KIND_CONFIRM Диалоговое окно, вызываемое с помощью функции Window. Confirm JavaScript.
COREWEBVIEW2_SCRIPT_DIALOG_KIND_PROMPT Диалоговое окно, вызываемое с помощью функции Window. prompt JavaScript.
COREWEBVIEW2_SCRIPT_DIALOG_KIND_BEFOREUNLOAD Диалоговое окно, вызываемое с помощью события JavaScript beforeunload.

COREWEBVIEW2_WEB_ERROR_STATUS

Значения состояния ошибки для переходов по веб-страницам.

COREWEBVIEW2_WEB_ERROR_STATUS перечисления

Данные Описания
COREWEBVIEW2_WEB_ERROR_STATUS_UNKNOWN Произошла неизвестная ошибка.
COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_COMMON_NAME_IS_INCORRECT Общее имя сертификата SSL не совпадает с веб-адресом.
COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_EXPIRED Срок действия сертификата SSL истек.
COREWEBVIEW2_WEB_ERROR_STATUS_CLIENT_CERTIFICATE_CONTAINS_ERRORS SSL-сертификат клиента включает ошибки.
COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_REVOKED SSL-сертификат отозван.
COREWEBVIEW2_WEB_ERROR_STATUS_CERTIFICATE_IS_INVALID Недопустимый сертификат SSL – это может означать, что сертификат не соответствует ПИН-контактам открытого ключа для имени узла. сертификат подписан недоверенным центром или с использованием слабого алгоритма, который нарушает ограничения на имена, сертификат содержит слабый ключ, срок действия сертификата является слишком длинным, не хватает сведений об отзыве или механизме отзыва, неоднозначное имя узла, отсутствие сведений о прозрачности сертификата, или сертификат связан с прежним корнем Symantec.
COREWEBVIEW2_WEB_ERROR_STATUS_SERVER_UNREACHABLE Узел недостижим.
COREWEBVIEW2_WEB_ERROR_STATUS_TIMEOUT Время ожидания соединения истекло.
COREWEBVIEW2_WEB_ERROR_STATUS_ERROR_HTTP_INVALID_SERVER_RESPONSE Сервер вернул недопустимый или нераспознанный ответ.
COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_ABORTED Соединение было прервано.
COREWEBVIEW2_WEB_ERROR_STATUS_CONNECTION_RESET Подключение было сброшено.
COREWEBVIEW2_WEB_ERROR_STATUS_DISCONNECTED Соединение с Интернетом разорвано.
COREWEBVIEW2_WEB_ERROR_STATUS_CANNOT_CONNECT Не удается подключиться к конечному объекту.
COREWEBVIEW2_WEB_ERROR_STATUS_HOST_NAME_NOT_RESOLVED Не удалось разрешить указанное имя узла.
COREWEBVIEW2_WEB_ERROR_STATUS_OPERATION_CANCELED Операция была отменена.
COREWEBVIEW2_WEB_ERROR_STATUS_REDIRECT_FAILED Перенаправление запроса завершилось сбоем.
COREWEBVIEW2_WEB_ERROR_STATUS_UNEXPECTED_ERROR Произошла непредвиденная ошибка.

COREWEBVIEW2_WEB_RESOURCE_CONTEXT

Перечисление для контекстов запросов веб-ресурсов.

COREWEBVIEW2_WEB_RESOURCE_CONTEXT перечисления

Данные Описания
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_ALL Все ресурсы.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_DOCUMENT Ресурсы документов.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_STYLESHEET Ресурсы CSS.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_IMAGE Графические ресурсы.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MEDIA Другие мультимедийные ресурсы, например видео.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FONT Ресурсы шрифта.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SCRIPT Ресурсы сценария.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_XML_HTTP_REQUEST HTTP-запросы.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_FETCH Получение взаимодействия API.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_TEXT_TRACK TextTrack ресурсы.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_EVENT_SOURCE Взаимодействие API EventSource.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_WEBSOCKET Взаимодействие API WebSocket.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_MANIFEST Манифесты веб-приложения.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_SIGNED_EXCHANGE Обмен подписанными HTTP-сообщениями.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_PING Запросы ping.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_CSP_VIOLATION_REPORT Отчеты о нарушениях CSP.
COREWEBVIEW2_WEB_RESOURCE_CONTEXT_OTHER Другие ресурсы.