在 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