在 UWP 表单中关闭用户与 WebView 的交互

Posted

技术标签:

【中文标题】在 UWP 表单中关闭用户与 WebView 的交互【英文标题】:Turn off user interaction with a WebView in a UWP form 【发布时间】:2020-03-31 11:26:53 【问题描述】:

我正在使用 Windows.UI.Xaml.Controls.WebView 查看一些 Web 内容。我想关闭所有用户与组件的交互。没有键盘事件,没有鼠标事件。我怎样才能做到这一点?

我已尝试取消 GettingFocus 事件,但我在 webview 中运行的 test-javascript 仍然会收到鼠标点击。

这是我测试过的代码的略微修改版本。 daWebView 是一个 WebView 组件。

  public sealed partial class MainPage : Page
  
    public MainPage()
    
      this.InitializeComponent();

      this.RequiresPointer = RequiresPointer.Never;
      Application.Current.RequiresPointerMode = ApplicationRequiresPointerMode.WhenRequested;

      bool res = daWebView.Focus(FocusState.Unfocused);

      daWebView.GettingFocus += DaWebView_GettingFocus;
      daWebView.PointerMoved += DaWebView_PointerMoved;

      Uri uri = new Uri("ms-appx-web:///index.html");
      daWebView.Source = uri;
    

    private void DaWebView_PointerMoved(object sender, PointerRoutedEventArgs e)
    
      // never happens.
      Debug.WriteLine("pointer moved");
    

    private void DaWebView_GettingFocus(UIElement sender, GettingFocusEventArgs args)
    
      // not working, it still gets focus and receive mouse movement.
      args.Cancel = true;
    
  

【问题讨论】:

你能分享一下到目前为止你尝试了什么吗? 这能回答你的问题吗? In HTML can I disable user interaction with an entire DOM sub-tree? 尼科,感谢您的链接。遗憾地说不,我需要告诉组件不要监听事件。至少我需要能够拦截和控制它们。 WebView 组件对我来说似乎太像一个剪切和粘贴的浏览器框架。我正在尝试替换 cefsharp,这是一个很好的软件,但它在 uwp 中运行不佳。 Pavel,请查看我更新的问题。 @Snorvarg,没有这样的api可以直接禁用与WebView的交互,更好的方法是使用js注入禁用WebView内容。 【参考方案1】:

在 UWP 表单中关闭用户与 WebView 的交互

没有这样的 api 可以直接禁用与 WebView 的交互,更好的方法是通过 js 注入禁用 WebView 内容。您可以使用InvokeScriptAsync 方法注入 js 方法来禁用交互。更多信息请参考document。

【讨论】:

是的,这也是我发现的。微软有点懒,没有正确暴露 webview 的内部工作原理..

以上是关于在 UWP 表单中关闭用户与 WebView 的交互的主要内容,如果未能解决你的问题,请参考以下文章

如何在移动 android/iOs(本机应用程序)中关闭 webview

在 iPad 中关闭原生 UIActionsheet 和 UIPopover

如何使用 VBA 在 Access 中关闭单个表单实例?

在 xamarin 表单中关闭应用程序时无法显示通知

如何让线程等待 JFrame 在 Java 中关闭?

Xamarin 表单 UWP - 显示 PDF