c# - UWP 应用中出现随机主页按钮
问题描述
不确定是否有人遇到过这个问题,但是每当我单击应用程序中的按钮时,我的 UWP 应用程序上就会出现一个随机的主页按钮。我的应用程序中不存在该按钮,因此我不确定它来自何处。它每次都出现在同一个地方,如果我拖动窗口,它不会随之移动。每次我单击按钮控件时它都会出现,然后在 4-5 秒后消失。
更新 经过进一步调查,我发现发生了什么。我在后台有一个 webview 控件,在前视图中有一个按钮控件。我导航到的网站(vans.co.uk)在左上角有它的商店标志,当鼠标悬停在它上面时,会出现“主页”工具提示。但是,如果我单击屏幕上任意位置的按钮控件,并在 click 方法中将该按钮的可见性属性更改为折叠,则会出现此“主页”工具提示。当单击按钮折叠时,必须有某种事件传递给 webview。这发生在任何网站上,不仅仅是 vans.co.uk,而且该网站上的徽标以工具提示弹出的方式定位。我写了一个简单的应用程序来重新创建它:
XAML:
<Page
x:Class="HomeTootipBug.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:HomeTootipBug"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<WebView x:Name="webView" Visibility="Visible" DefaultBackgroundColor="White" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
<Button x:Name="btn" Background="Gray" HorizontalAlignment="Center" VerticalAlignment="Center" Width="500" Height="100" Click="btn_Click"></Button>
</Grid>
</Page>
xml.cs:
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace HomeTootipBug
{
public sealed partial class MainPage : Page
{
public bool compOut = false;
public MainPage()
{
this.InitializeComponent();
webView.Navigate(new Uri("https://www.vans.co.uk"));
}
private void btn_Click(object sender, RoutedEventArgs e)
{
btn.Visibility = Visibility.Collapsed;
btn.Visibility = Visibility.Visible;
}
}
}
解决方案
这似乎是 vans.co.uk 的工作方式和 UWP 事件处理方式的组合。简而言之,在 click 中折叠按钮可以让 WebView 获得焦点,很可能会提示 vans 网站运行显示 Home 按钮的 JS。
您可以通过将 GotFocus 事件处理程序添加到 WebView 来监视发生的情况。如果您从按钮未折叠的场景开始:
private void btn_Click(object sender, RoutedEventArgs e)
{
//btn.Visibility = Visibility.Collapsed;
//btn.Visibility = Visibility.Visible;
Debug.WriteLine("Button Clicked "+ e.OriginalSource.ToString());
}
private void WebView_GotFocus(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Webview got focus");
}
单击按钮几次后,您可以看到以下调试输出:
Button Clicked Windows.UI.Xaml.Controls.Button
Button Clicked Windows.UI.Xaml.Controls.Button
Button Clicked Windows.UI.Xaml.Controls.Button
Button Clicked Windows.UI.Xaml.Controls.Button
Button Clicked Windows.UI.Xaml.Controls.Button
现在,如果您从代码中删除注释,启用折叠:
private void btn_Click(object sender, RoutedEventArgs e)
{
btn.Visibility = Visibility.Collapsed;
btn.Visibility = Visibility.Visible;
Debug.WriteLine("Button Clicked "+ e.OriginalSource.ToString());
}
private void WebView_GotFocus(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Webview got focus");
}
单击几下后,您可以在调试控制台中看到以下输出:
Button Clicked Windows.UI.Xaml.Controls.Button
Webview got focus
Webview got focus
Button Clicked Windows.UI.Xaml.Controls.Button
Webview got focus
Webview got focus
Button Clicked Windows.UI.Xaml.Controls.Button
Webview got focus
这很可能与 UWP 如何处理事件冒泡和路由事件有关。
推荐阅读
- reactjs - 如果用户在 React 中登录,则重定向并显示组件
- node.js - 如何将“子 ID”与文档 ID 进行比较?
- java - 为什么启动 Spring Boot 微服务时 Liquibase 不在 postgres 中创建我的表?
- laravel - 如何修复 Hostgator 共享主机中的 CORS 问题
- android - 如何在单个子滚动视图颤动中使用列
- ide - 如何在pycharm中粘贴多行文本?
- python - 为什么`@property def x: return x`会导致Python崩溃?
- python - 如何逐个字符显示标签文本?
- angular - 使用 CLI 在 Firebase 上部署 Angular 站点(免费)
- google-apps-script - 有没有办法使用谷歌脚本函数批准 =ImportRange(url,range) ?