我正在使用 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/