c# - Webview 在触摸时显示设备键盘并忽略网站焦点脚本

标签 c# xamarin.android

我正在使用 WebView 加载外部网站。

我面临的问题是该网站有一些 javascript 代码,这些代码专注于网站上的不同输入字段。每当您启动应用程序或重新加载网站(不时发生)时,设备键盘都会持续显示。

有什么方法可以停止/阻止任何 javascript xx.focus();代码?或者您能否在 webview 中以某种方式仅在按下任何输入字段时使键盘可见?

最佳答案

我的解决方案是向网站添加/注入(inject)自定义 javascript。

不是最好的解决方案,但它适用于该网站。 如果有人找到比这更好的解决方案,请随时发布,我会将其标记为答案。

    protected override void OnCreate(Bundle savedInstanceState)
    {
        // ... //

        // Iniate webview
        WebView web_view = new WebView(this);
        web_view = FindViewById<WebView>(Resource.Id.webview);
        web_view.Settings.JavaScriptEnabled = true;
        web_view.Settings.DomStorageEnabled = true;
        // Create custom WebViewClient to override
        web_view.SetWebViewClient(new WebViewOverride(this));

        web_view.LoadUrl(url);
    }

每当页面加载完成时,我都会开始模糊处理,以从本可以在页面加载时添加的输入字段中移除焦点。 我将添加一个点击事件监听器,它会检查点击的元素是否不是“输入”类型。如果不是输入字段 - 移除焦点(这是因为当您按下不同的按钮时输入字段有时会获得焦点)。

public class WebViewOverride : WebViewClient
{
    public override void OnPageFinished(WebView view, String url)
    {
        view.LoadUrl("javascript:  (function () { " +
            "document.activeElement.blur(); " +
            "var container = document.getElementById('UpdatePanel'); " +
            "container.addEventListener('click', function(e) { " +
            "var input = e.target.nodeName.toLowerCase(); " +
            "if (input !== 'input') { document.activeElement.blur();  } " +
            "}); " +
            "})();");
    }
}

关于c# - Webview 在触摸时显示设备键盘并忽略网站焦点脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57510688/

相关文章:

c# - 当存在非静态、更适合的方法时,如何使用动态参数调用静态方法?

java - 在 Xamarin.Android 上启用 Multi-Dex 时出现 "Compilation failed: Unknown option: --multi-dex"

windows-phone-7 - Vici CoolStorage 便携性 : Monotouch, MonoDroid 和 Windows Phone

xamarin.android - 如何退出 Xamarin Forms 中的应用程序?

c# - 刷新失败,出现 403 禁止错误。刷新 token 已被撤销或过期

android - 在 Android 中使用它的类似 UICollectionViewDataSource 方法?

c# - LinqToEntities 在 LEFT OUTER JOIN 中使用小于号 (<)

c# - 带有 WCF 的 Autofac - 嵌套生命周期问题

c# - 当实际进行更改需要批准时如何保存对象?

c# - ASP.NET vNext 和 Ninject 在两个服务的构造函数之间检测到循环依赖