添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
public ref class WebView sealed : FrameworkElement
/// [Windows.Foundation.Metadata.Activatable(Windows.UI.Xaml.Controls.IWebViewFactory4, 65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class WebView final : FrameworkElement
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(Windows.UI.Xaml.Controls.IWebViewFactory4, 65536, "Windows.Foundation.UniversalApiContract")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class WebView final : FrameworkElement
[Windows.Foundation.Metadata.Activatable(typeof(Windows.UI.Xaml.Controls.IWebViewFactory4), 65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class WebView : FrameworkElement
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(typeof(Windows.UI.Xaml.Controls.IWebViewFactory4), 65536, "Windows.Foundation.UniversalApiContract")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class WebView : FrameworkElement
Public NotInheritable Class WebView
Inherits FrameworkElement
<WebView .../>
						   Object
						   IInspectable
						   DependencyObject
						   UIElement
						   FrameworkElement
					 WebView 

对于桌面应用,建议使用 WebView2 控件,该控件作为适用于 UWP 的 Windows UI 库 2 (WinUI 2) 的一部分提供。 WebView2 使用 Microsoft Edge (Chromium) 作为呈现引擎,在应用中显示 Web 内容。 有关详细信息,请参阅 Microsoft Edge WebView2 简介WinUI 2 (UWP) 应用中的 WebView2 入门和 WinUI API 参考中的 WebView2

XAML 岛:XAML 岛应用不支持此控件。 有关替代方法,请参阅 XAML 岛 - Web 视图控件

WebView 不是 Control 子类,因此没有控件模板。 可以设置各种属性来控制 WebView 的某些可视方面。 显示区域受 WidthHeight 属性的约束。 若要转换、缩放、倾斜和旋转 WebView,请使用 RenderTransform 属性。 若要控制 WebView 的不透明度,请设置 Opacity 属性。 若要在 HTML 内容不指定颜色的情况下指定一种用作 Web 页面背景的颜色,请设置 DefaultBackgroundColor 属性。

可以使用 DocumentTitle 属性获取当前显示在 WebView 中的 HTML 文档的标题。

尽管 WebView 不是 Control 子类,但它将接收键盘输入焦点并参与 Tab 序列。 它提供 Focus 方法,以及 GotFocusLostFocus 事件,但它不具有 Tab 键相关属性。 它在 Tab 键序列中的位置与在 XAML 文档顺序中的位置相同。 选项卡序列包括 WebView 内容中可接收输入焦点的所有元素。

如事件表中所示,WebView 不支持从 UIElement 继承的大多数用户输入事件,例如 KeyDownKeyUpPointerPressed。 一种常见的解决方法是将 InvokeScriptAsync 与 JavaScript eval 函数结合使用来使用 HTML 事件处理程序,并使用 HTML 事件处理程序中的 window.external.notify 通过 WebView.ScriptNotify 通知应用程序。

在为Windows 10编译的应用中,WebView 使用 Microsoft Edge 呈现引擎来显示 HTML 内容。 在为Windows 8或Windows 8.1编译的应用中,WebView 在文档模式下使用 Internet Explorer 11。 它不支持任何 Microsoft ActiveX 控件或插件,如 Microsoft Silverlight 或可移植文档格式 (PDF) 文件。

WebView 为基本导航提供了多个 API: GoBackGoForwardStopRefreshCanGoBackCanGoForward。 这些 API 可用于向你的应用添加典型的 Web 浏览功能。

若要设置 WebView 的初始内容,请在 XAML 中设置 Source 属性。 XAML 分析程序会自动将字符串转换为 URI

<!-- Source file is on the web. -->
<WebView x:Name="webViewA" Source="http://www.contoso.com"/>
<!-- Source file is in local storage. -->
<WebView x:Name="webViewB" Source="ms-appdata:///local/intro/welcome.html"/>
<!-- Source file is in the app package. -->
<WebView x:Name="webViewC" Source="ms-appx-web:///help/about.html"/>

Source 属性可以在代码中设置,但通常使用 Navigate 方法之一在代码中加载内容,而不是这样做。

若要加载 Web 内容,请将 Navigate 方法与使用 http 或 https 方案的 Uri起使用。

webViewA.Navigate(new Uri("http://www.contoso.com"));

若要使用 POST 请求和 HTTP 标头导航到统一资源标识符 (URI) ,请使用 NavigateWithHttpRequestMessage 方法。 此方法仅支持针对 HttpRequestMessage.Method 属性值的 HttpMethod.PostHttpMethod.Get

若要加载应用的 LocalFolderTemporaryFolder 数据存储中的未压缩和未加密内容,请将 Navigate 方法与使用 ms-appdata schemeUri 结合使用。 此方案的 WebView 支持要求将内容放置在本地文件夹或临时文件夹下的子文件夹中。 这样就可以导航到统一资源标识符 (URI) ,例如 ms-appdata:///local/ folder/文件.html和 ms-appdata:///temp/ folder/文件.html。 (若要加载压缩或加密文件,请参阅 NavigateToLocalStreamUri。)

其中的每个第一级别的子文件夹独立于其他第一级别子文件夹中的内容。 例如,可以导航到 ms-appdata:///temp/folder1/file.html,但在此文件中不能链接到 ms-appdata:///temp/folder2/file.html。 但是,你仍然可以使用 ms-appx-web 方案链接到应用包中的 HTML 内容,并使用 httphttps 统一资源标识符 (URI) 方案链接到 Web 内容。

webViewA.Navigate(new Uri("ms-appdata:///local/intro/welcome.html"));

若要加载来自应用程序包中内容,请将 Navigate 方法与使用 ms-appx-web schemeUri 结合使用。

webViewA.Navigate(new Uri("ms-appx-web:///help/about.html"));

使用 NavigateToLocalStreamUri 方法,通过自定义解析程序加载本地内容。 这样既可以支持高级方案(如下载和缓存基于 Web 的内容供脱机使用),也可以支持从压缩文件中提取内容。

响应导航事件

WebView 提供了多个事件,可用于响应导航和内容加载状态。 对于根 WebView 内容,事件按以下顺序发生:

  • NavigationStarting - 在 WebView 导航到新内容之前发生。 可以通过将 WebViewNavigationStartingEventArgs.Cancel 属性设置为 true 来取消此事件的处理程序中的导航。
  • webViewA.NavigationStarting += webViewA_NavigationStarting;
    private void webViewA_NavigationStarting(object sender, WebViewNavigationStartingEventArgs args)
        // Cancel navigation if URL is not allowed. (Implemetation of IsAllowedUri not shown.)
        if (!IsAllowedUri(args.Uri))
            args.Cancel = true;
    
  • ContentLoading - 在 WebView 开始加载新内容时发生。
  • webViewA.ContentLoading += webViewA_ContentLoading;
    private void webViewA_ContentLoading(WebView sender, WebViewContentLoadingEventArgs args)
        // Show status.
        if (args.Uri != null)
            statusTextBlock.Text = "Loading content for " + args.Uri.ToString();
    
  • DOMContentLoaded - 在 WebView 完成分析当前 HTML 内容时发生。
  • webViewA.DOMContentLoaded += webViewA_DOMContentLoaded;
    private void webViewA_DOMContentLoaded(WebView sender, WebViewDOMContentLoadedEventArgs args)
        // Show status.
        if (args.Uri != null)
            statusTextBlock.Text = "Content for " + args.Uri.ToString() + " has finished loading";
    
  • NavigationCompleted - 在 WebView 完成加载当前内容或导航失败时发生。 若要确定导航是否已失败,请检查 WebViewNavigationCompletedEventArgs 类的 IsSuccessWebErrorStatus 属性。
  • webViewA.NavigationCompleted += webViewA_NavigationCompleted;
    private void webViewA_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
        if (args.IsSuccess == true)
            statusTextBlock.Text = "Navigation to " + args.Uri.ToString() + " completed successfully.";
            statusTextBlock.Text = "Navigation to: " + args.Uri.ToString() +
                                   " failed with error " + args.WebErrorStatus.ToString();
    

    对于 WebView 内容中的每个 iframe ,类似事件按相同的顺序发生:

  • FrameNavigationStarting - 在 WebView 中的框架导航到新内容之前发生。
  • FrameContentLoading - 当 WebView 中的帧已开始加载新内容时发生。
  • FrameDOMContentLoaded - 当 WebView 中的框架已完成分析其当前 HTML 内容时发生。
  • FrameNavigationCompleted - 在 WebView 中的帧完成加载其内容时发生。
  • 响应潜在问题

    可以响应内容的潜在问题,例如长时间运行的脚本、WebView 无法加载的内容以及不安全内容的警告。

    脚本运行期间,你的应用可能不做任何响应。 当 WebView 执行 JavaScript 时,LongRunningScriptDetected 事件会定期发生,并提供中断脚本的机会。 若要确定脚本已运行的时间,请检查 WebViewLongRunningScriptDetectedEventArgsExecutionTime 属性。 若要停止该脚本,请将事件参数 StopPageScriptExecution 属性设置为 true。 除非在后续 WebView 导航期间重新加载已停止的脚本,否则该脚本不会再次执行。

    WebView 控件不能承载任意文件类型。 尝试加载 WebView 无法承载的内容时,将发生 UnviewableContentIdentified 事件。 你可以处理此事件并通知用户,或者使用 Launcher 类将该文件重定向到外部浏览器或其他应用。

    同样,在 Web 内容(如 fbconnect:// 或 mailto://)中调用不支持的统一资源标识符 (URI) 方案时,会发生 UnsupportedUriSchemeIdentified 事件。 可以处理此事件以提供自定义行为,而不是允许默认系统启动器启动统一资源标识符 (URI) 。

    当 WebView 显示 SmartScreen 筛选器报告为不安全的内容的警告页面时,将发生 UnsafeContentWarningDisplaying 事件。 如果用户选择继续导航,随后导航到该页面将不显示警告,也不会触发该事件。

    处理 WebView 内容的特殊情况

    你可以使用 ContainsFullScreenElement 属性和 ContainsFullScreenElementChanged 事件来检测、响应和支持 Web 内容中的全屏体验,例如全屏视频播放。 例如,可以使用 ContainsFullScreenElementChanged 事件调整 WebView 的大小,以占用整个应用视图,或者,如以下示例所示,在需要全屏 Web 体验时,将窗口化应用置于全屏模式。

    // Assume webView is defined in XAML
    webView.ContainsFullScreenElementChanged += webView_ContainsFullScreenElementChanged;
    private void webView_ContainsFullScreenElementChanged(WebView sender, object args)
        var applicationView = ApplicationView.GetForCurrentView();
        if (sender.ContainsFullScreenElement)
            applicationView.TryEnterFullScreenMode();
        else if (applicationView.IsFullScreenMode)
            applicationView.ExitFullScreenMode();
    

    你可以使用 NewWindowRequested 事件来处理托管 web 内容请求显示新窗口的情况,例如弹出窗口。 你可以使用另一个 WebView 控件来显示请求窗口的内容。

    PermissionRequested 事件用于启用需要特殊功能的 Web 功能。 当前这些功能包括:地理位置、IndexedDB 存储以及用户音频和视频(例如,来自麦克风或摄像头)。 如果你的应用访问用户位置或用户媒体,仍需要在应用清单中声明此功能。 例如,使用地理位置的应用在 Package.appxmanifest 中至少需要声明以下功能:

    <Capabilities>
      <Capability Name="internetClient"/>
      <DeviceCapability Name="location"/>
    </Capabilities>
    

    除了由应用处理 PermissionRequested 事件,用户还需要批准请求位置或媒体功能的应用的标准系统对话框,以便启用这些功能。

    下面是应用如何在必应地图中支持地理位置的示例:

    // Assume webView is defined in XAML
    webView.PermissionRequested += webView_PermissionRequested;
    private void webView_PermissionRequested(WebView sender, WebViewPermissionRequestedEventArgs args)
        if (args.PermissionRequest.PermissionType == WebViewPermissionType.Geolocation &&
            args.PermissionRequest.Uri.Host == "www.bing.com")
            args.PermissionRequest.Allow();
    

    如果你的应用需要用户输入或其他异步操作来响应权限请求,则使用 WebViewPermissionRequestDefer 方法创建一个可以稍后执行的 WebViewDeferredPermissionRequest。 请参阅 WebViewPermissionRequest.Defer

    如果用户必须安全地注销 WebView 中托管的网站,或者在安全性很重要的其他情况下,请调用静态方法 ClearTemporaryWebDataAsync 以从 WebView 会话中清除所有本地缓存的内容。 这可以防止恶意用户访问敏感数据。

    与 WebView 内容交互

    可以使用 InvokeScriptAsync 方法调用或将脚本注入 WebView 内容,并使用 ScriptNotify 事件从 WebView 内容中获取信息,从而与 WebView 的内容进行交互。

    若要在 WebView 内容中调用 JavaScript,请使用 InvokeScriptAsync 方法。 调用的脚本只可以返回字符串值。

    例如,如果名为 webViewA 的 WebView 的内容包含一个名为 setDate 的函数,该函数采用 3 个参数,则可以如下所示调用它。

    string[] args = {"January", "1", "2000"};
    string returnValue = await webViewA.InvokeScriptAsync("setDate", args);
    

    你可以将 InvokeScriptAsync 与 JavaScript eval 函数结合使用,以便将内容注入到 Web 页面

    在这里,XAML TextBox (nameTextBox.Text) 的文本将写入托管在 中的 HTML 页面中的 webViewAdiv。

    private async void Button_Click(object sender, RoutedEventArgs e)
        string functionString = String.Format("document.getElementById('nameDiv').innerText = 'Hello, {0}';", nameTextBox.Text);
        await webViewA.InvokeScriptAsync("eval", new string[] { functionString });
    

    WebView 内容中的脚本可以使用带有字符串参数 的 window.external.notify 将信息发送回应用。 若要接收这些消息,请处理 ScriptNotify 事件。

    若要使外部网页在调用 window.external.notify 时触发 ScriptNotify 事件,必须在应用清单的 ApplicationContentUriRules 节中包含该页面的统一资源标识符 (URI) 。 (可以在 Microsoft Visual Studio 中的 Package.appxmanifest designer.“内容 URI”选项卡上执行此操作。) 此列表中的 URI 必须使用 HTTPS,并且可能包含子域通配符 (例如 https://.microsoft.com) ,但它们不能包含域通配符 (,例如 https://.com 和 https://) 。 该部件清单要求不适用于源自应用包的内容、使用 ms-local-stream:// URI 的内容或使用 NavigateToString 加载的内容。

    访问 WebView 中的Windows 运行时

    从 Windows 10 开始,可以使用 AddWebAllowedObject 方法将本机类的实例从 Windows 运行时 组件注入到 WebView 的 JavaScript 上下文中。 这允许在该 WebView 的 JavaScript 内容中完全访问该对象的本机方法、属性和事件。 必须使用 AllowForWeb 属性修饰该类。

    例如,此代码将从 Windows 运行时 组件导入的 实例MyClass注入到 WebView 中。

    private void webView_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
        if (args.Uri.Host == "www.contoso.com")
            webView.AddWebAllowedObject("nativeObject", new MyClass());
    

    有关详细信息,请参阅 WebView.AddWebAllowedObject

    此外,可以允许 WebView 中受信任的 JavaScript 内容直接访问 Windows 运行时API。 这为 WebView 中托管的 Web 应用提供了强大的本机功能。 若要启用此功能,必须将受信任内容的统一资源标识符 (URI) 添加到 Package.appxmanifest 中应用的 ApplicationContentUriRules 中的允许列表中,同时将 WindowsRuntimeAccess 专门设置为“all”。

    此示例显示应用清单的一部分。 在这里,向本地统一资源标识符 (URI) 授予对Windows 运行时的访问权限。

    <Applications>
      <Application Id="App"
        <uap:ApplicationContentUriRules>
          <uap:Rule Match="ms-appx-web:///Web/App.html" WindowsRuntimeAccess="all" Type="include"/>
        </uap:ApplicationContentUriRules>
      </Application>
    </Applications>
    

    用于 Web 内容托管的选项

    从 Windows 10 开始,可以使用 WebViewSettings) 类型的 WebView.Settings 属性 (来控制是否启用 JavaScript 和 IndexedDB。 例如,如果使用 WebView 显示严格静态内容,则可能需要禁用 JavaScript 以获得最佳性能。

    捕获 WebView 内容

    若要启用与其他应用共享 WebView 内容,请使用 CaptureSelectedContentToDataPackageAsync 方法,该方法将所选内容作为 DataPackage 返回。 此方法是异步的,因此必须使用延迟来阻止 DataRequested 事件处理程序在异步调用完成之前返回。

    若要获取 WebView 当前内容的预览图像,请使用 CapturePreviewToStreamAsync 方法。 此方法会创建当前内容的图像,并将其写入指定的流。

    默认情况下,WebView 内容托管在桌面设备系列中设备上的 UI 线程上,而托管在所有其他设备上的 UI 线程之外。 你可以使用 WebView.DefaultExecutionMode 静态属性来查询当前客户端的默认线程行为。 如有必要,可以使用 WebView(WebViewExecutionMode) 构造函数替代此行为。

    支持的 WebViewExecutionMode 值为:

  • SameThread - WebView 内容托管在 UI 线程上。
  • SeparateThread - WebView 内容托管在 UI 线程外的单独线程上。
  • SeparateProcess - (Windows 10版本 1803 或更高版本) WebView 内容托管在应用进程外的单独进程中。 应用的所有 WebView 实例共享相同的单独进程,每个 WebView 实例没有单独的进程。
  • 在单独的进程中运行时,WebView 存在两种行为差异:

  • WebView 进程可能会终止。 可以通过侦听 SeparateProcessLost 事件来通知你。
  • WebView 进程可以异步拒绝键盘焦点。 在这种情况下,WebView.Focus 方法返回 true,然后立即 (但异步) 焦点从 WebView 移开。 (其他移动焦点的方式类似,例如 FocusManager.TryMoveFocus.) 可以使用 FocusManager.TryFocusAsyncFocusManager.TryMoveFocusAsync API 更显式地跟踪这一点。
  • 此示例演示如何创建一个 WebView 控件,该控件在主机应用的单独进程中运行,并在单独的进程丢失时重新创建。

    <Border x:Name="WebViewBorder" Loaded="WebViewBorder_Loaded" /> </Grid> public sealed partial class MainPage : Page public MainPage() this.InitializeComponent(); var webView = new WebView(WebViewExecutionMode.SeparateProcess); WebViewBorder.Child = webView;; InitializeWebView(webView); void InitializeWebView(WebView webView) webView.Source = this.WebViewSourceUri; webView.SeparateProcessLost += (sender, e) => var newWebView = new WebView(WebViewExecutionMode.SeparateProcess); InitializeWebView(newWebView); WebViewBorder.Child = newWebView;

    在移动设备上托管 UI 线程上的内容时可能存在性能问题,因此,更改 DefaultExecutionMode 时,请务必在所有目标设备上进行测试。

    托管 UI 线程外内容的 WebView 与父控件不兼容,父控件需要手势从 WebView 控件向上传播到父控件,例如 FlipViewScrollViewer 和其他相关控件。 这些控件将无法接收在线程外 WebView 中启动的手势。 此外,并不直接支持打印线程外的 Web 内容,应改为使用 WebViewBrush 填充打印元素。

    单独进程中 WebView 的焦点行为

    无论是在应用进程中运行,还是在单独的进程中运行,都可以通过调用 WebView.Focus 方法在 WebView 上设置焦点。 这等效于 Control.Focus 和 Hyperlink.Focus 方法 (注意 WebView 不派生自 Control) 。

    同样, FocusManager 类上的几种方法可能会影响 WebView (或 Control 或 Hyperlink) : TryMoveFocusFindNextFocusableElementFindLastFocusableElementGetFocusedElement。 例如,TryMoveFocus 将焦点移动到 WebView,GetFocusedElement 返回具有焦点的 WebView。

    最后,将焦点移入或移出 WebView 会引发焦点事件,同时在 WebView 本身以及失去或接收焦点的元素上。 事件为 LosingFocusLostFocusGettingFocusGotFocus。 例如,当焦点从控件移动到 WebView 时,控件将引发 LosingFocus 和 LostFocus 事件,WebView 将引发 GettingFocus 和 GotFocus 事件。

    当 WebView 在单独的进程中运行时,这些 API 的行为会略有变化。 假设 WebView 可聚焦,WebView.Focus 方法将返回 true (成功) ,但焦点尚未实际移动。 如果调用 FocusManager.TryMoveFocus 而不是 WebView.Focus 方法,并且它将 WebView 标识为下一个可聚焦元素,则也是如此。

    行为的差异如下:

  • FocusManager.GetFocusedElement 不会返回 WebView,除非异步操作完成。
  • 失去焦点的控件将同步接收其 LosingFocus 事件;但是,除非异步操作完成,否则它不会接收 LostFocus。
  • 同样,GettingFocus 事件将在 WebView 上同步发生;但是,除非异步操作完成,否则不会引发 GotFocus 事件。
  • 如果改为调用 FocusManager.TryFocusAsync,则不会更改这些更改。 但是,异步方法使你有机会确定焦点更改是否成功。

    在单独的进程中,对 WebView 以外的元素调用 FocusManager.TryMoveFocusAsync 将以同步方式完成。

    此示例演示如何将焦点移动到下一个逻辑元素,但如果该操作失败,请将焦点还原到其初始位置。

    async void MoveFocus(WebView webView))
        FocusMovementResult result;
        result = await FocusManager.TryFocusAsync(webView, FocusState.Programmatic);
        if (!result.Succeeded)
            // Reset focus to the starting position
            this.Focus(FocusState.Programmatic);
    

    警报的使用

    如果 WebView 中托管的网页使用 JavaScript Alert 函数,则不会显示它。 这是所有 WebView 版本的设计。

    你可能能够截获 警报 显示的信息,并在主机应用程序中执行所需操作。 这是否可能取决于页面的编写方式以及你是否控制它。 提供了一个示例,演示了执行此操作的一种可能方法。 此示例针对 Windows 8.1 和 Windows Phone 8.1 编写,但也适用于使用 通用 Windows 平台 (UWP) 的应用。 但是,这可能不适用于每个方案。

    如何在通用 Windows 应用中的 WebView 中截获 JavaScript 警报示例

    以前版本的说明

    Windows 8.1

    以下 WebView API 在 Windows 8.1 中已弃用:

  • LoadCompletedNavigationFailed。 请改用 NavigationCompleted
  • InvokeScript。 请改用 InvokeScriptAsync
  • DataTransferPackageDataTransferPackageProperty。 请改用 CaptureSelectedContentToDataPackageAsync
  • AllowedScriptNotifyUrisAnyScriptNotifyUriAllowedScriptNotifyUrisProperty。 将页面的 URI 改为包含在应用清单的 ApplicationContentUriRules 部分中。
  • 仅在 Windows 上,可以处理 UnsafeContentWarningDisplaying 事件。 当 WebView 显示 SmartScreen 筛选器报告为不安全内容的警告页面时,会发生此事件。 如果用户选择继续导航,随后导航到该页面将不显示警告,也不会触发该事件。 此事件不针对Windows Phone实现。

    通过调用 InvokeScriptAsync 方法在 WebView 中调用 JavaScript 时,不支持需要辅助窗口(如 Alert)的函数。

    Windows Phone 8

  • Windows Phone 8.1 上的 WebView 与需要手势从 WebView 控件向上传播到父控件的父控件不兼容,例如 FlipViewScrollViewer 类和其他相关控件。
  • Windows Phone 8.1 上的 WebView 包括 ContainsFullScreenElement 属性和 ContainsFullScreenElementChanged 事件。 这些成员在 Windows 上不可用。
  • 在Windows 10之前,不会为Windows Phone实现 UnsafeContentWarningDisplaying 事件。

    Windows 8

    这些备注仅适用于为Windows 8编译的应用,即使在 Windows 8.1 或更高版本上运行也是如此。

    在 Windows 8 中,WebView 具有一个特征,即其他 UI 区域(如控件)无法呈现在 WebView 之上。 这种“空域问题”是由于窗口区域在内部的处理方式,特别是如何处理输入事件以及屏幕绘制方式。 如果要呈现 HTML 内容并将其他 UI 元素放在该 HTML 内容之上,则应使用 WebViewBrush 作为呈现区域。 WebView 仍提供 HTML 源信息,可以通过 SourceName 属性引用该 WebView。 WebViewBrush 没有此覆盖限制。

    如果要显示仅偶尔包含重叠内容的交互式 WebView ((例如下拉列表或应用栏) ),可以在必要时暂时隐藏 WebView 控件,将其替换为使用 WebViewBrush 填充的元素。 然后,当重叠内容不再存在时,可以再次显示原始 WebView。

    “空域问题”已从Windows 8.1开始修复,不适用于面向Windows 8.1或Windows 10的应用。

    WebView 始终在文档模式下使用 Internet Explorer 10。

    版本历史记录

    Windows 版本 SDK 版本

    为Windows 8.1编译的应用不支持 AllowedScriptNotifyUris。 请改为更新应用清单的 ApplicationContentUriRules 部分。 有关详细信息,请参阅“备注”部分。

    获取或设置允许将 ScriptNotify 事件触发到此 WebView 的 URI 的安全列表。

    为Windows 8.1编译的应用不支持 AllowedScriptNotifyUrisProperty。 请改为更新应用清单的 ApplicationContentUriRules 部分。 有关详细信息,请参阅“备注”部分。

    标识 AllowedScriptNotifyUris 依赖属性。

    为Windows 8.1编译的应用不支持 AnyScriptNotifyUri。 请改为更新应用清单的 ApplicationContentUriRules 部分。 有关详细信息,请参阅“备注”部分。

    获取一个值,该值可用于设置 AllowedScriptNotifyUris 属性,以指示任何页面都可以在此 WebView 中触发 ScriptNotify 事件。

    Windows 8.1后,DataTransferPackage 可能会更改或不可用。 请改用 CaptureSelectedContentToDataPackageAsync

    获取传递到 WebView 的剪贴板 DataPackage

    DataTransferPackageProperty 可能会在Windows 8.1后更改或不可用。 请改用 CaptureSelectedContentToDataPackageAsync

    标识 DataTransferPackage 依赖属性。

    获取与此对象关联的 CoreDispatcherCoreDispatcher 表示可以访问 UI 线程上的 DependencyObject 的工具,即使代码是由非 UI 线程启动的。

    (继承自 DependencyObject)

    获取或设置文本和其他 UI 元素在控制其布局的任何父元素中的流动方向。 此属性可以设置为 LeftToRightRightToLeft。 在任何元素上将 FlowDirection 设置为 RightToLeft 会将对齐方式设置为右对齐,将阅读顺序设置为从右到左,并将控件的布局设置为从右到左流动。

    (继承自 FrameworkElement)

    获取或设置 UIElement (使用的 UI 主题及其子元素) 用于资源确定。 使用 RequestedTheme 指定的 UI 主题可以替代应用级 RequestedTheme

    (继承自 FrameworkElement)

    为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。 将 handledEventsToo 指定为 true 以调用提供的处理程序,即使在其他位置处理事件也是如此。

    (继承自 UIElement)

    汇报 UIElementDesiredSize。 通常,为其布局子级实现自定义布局的对象从其自己的 MeasureOverride 实现中调用此方法,以形成递归布局更新。

    (继承自 UIElement)

    每当应用程序代码或内部进程 ((例如重新生成布局传递)) 调用 ApplyTemplate 时调用。 简单来说,这意味着在 UI 元素在应用中显示之前调用 方法。 重写此方法以影响类的默认模板后逻辑。

    (继承自 FrameworkElement)

    在应用中处理 键盘快捷方式 (或快捷键) 之前调用。 每当应用程序代码或内部进程调用 ProcessKeyboardAccelerators 时调用。 重写此方法以影响默认加速器处理。

    (继承自 UIElement)

    在释放之前启动 Press 操作的指针设备时发生,而此元素中。 请注意, 不保证按下 操作的结束会触发 PointerReleased 事件;其他事件可能会改为触发。 有关详细信息,请参阅备注。

    (继承自 UIElement)