在这种情况下,我试图禁用任何双击功能,以禁用双击instagram图片以使其喜欢的功能。我已经测试了一些JavaScript作为chrome扩展,并为我提供了所需的结果,但是当我将其带入Xamarin WebView时,它不起作用。奇怪的是,注入的JavaScript正在运行,因为如果其中有警报,则会显示该警报。它仍然喜欢Instagram上的图像。
这是Chrome扩展程序的JavaScript
document.addEventListener("dblclick",handler,true);function handler(e) {
e.stopPropagation();
e.preventDefault(); }
这是Xamarin的代码
string function = "document.addEventListener(\"dblclick\",handler,true);function handler(e){e.stopPropagation();e.preventDefault();}";
Xamarin.Forms.Device.BeginInvokeOnMainThread(() => { webBrowser.Eval(function); });
更新: 经过一些测试,我只能在运行网站的移动版本时确认这是一个问题。我不确定这是否与事件的触发方式或与此相关的事情有关,但这仅与移动设备有关。
答案 0 :(得分:2)
我创建了一个仅带有网络视图的示例页面来测试您的情况:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TestApp.Page1" Appearing="Page1_OnAppearing">
<WebView x:Name="TestWebView" />
</ContentPage>
在后面的代码中,我用一个按钮设置了静态html,双击该按钮会显示警报:
public Page1()
{
InitializeComponent();
// Set static html
TestWebView.Source = new HtmlWebViewSource
{
Html = @"<html>
<body>
<button id='testbutton' style='font-size: 30px;'>Click me</button>
<script type='text/javascript'>
document.getElementById('testbutton').addEventListener('dblclick', function (e) {
alert('double clicked');
});
</script>
</body>
</html>"
};
}
并且在页面的OnAppearing事件中,我执行javascript来防止双击事件处理程序:
private void Page1_OnAppearing(object sender, EventArgs e)
{
var script = "document.addEventListener('dblclick',handler,true);function handler(e) { e.stopPropagation(); e.preventDefault(); }";
TestWebView.Eval(script);
}
运行此代码后,双击我的测试按钮后,仍然会出现双击警报。这是因为javascript-eval运行到很早。换句话说:在执行javascript之前,您必须给网络视图更多时间来加载内容:
private async void Page1_OnAppearing(object sender, EventArgs e)
{
// Just wait a little bit before calling eval
await Task.Delay(1000);
var script = "document.addEventListener('dblclick',handler,true);function handler(e) { e.stopPropagation(); e.preventDefault(); }";
TestWebView.Eval(script);
}
现在,警报不再显示。
让我知道这是否适合您的情况。
编辑:另一种方法 可能是由于Instagram页面的实施引起的。另一种禁用双击的方法是禁用instagram帖子上的整个事件。
您可以设置以下css-style来禁用此功能:
style="pointer-events:none;"
因此,您必须确定div元素的xpath并使用javascript设置样式,如下所示:
htmlElement.setAttribute("style", "pointer-events:none;");
我在浏览器(chrome调试器)上对此进行了测试,并且可以正常工作。但是我不能通过应用程序最终说出这是否适用于您的情况。