在 UIWebView/WKWebview 中禁用自动完成
Posted
技术标签:
【中文标题】在 UIWebView/WKWebview 中禁用自动完成【英文标题】:Disable autocomplete in UIWebView/WKWebview 【发布时间】:2015-07-06 15:36:31 【问题描述】:我正在开发一个充当 web 视图的简单应用程序。我需要在 webview 中加载的任何内容上禁用自动完成和其他几个键盘功能。我知道如何在普通视图控制器中禁用每个 UITextInput 的自动完成功能,但我不知道你可以在 webview 上全局禁用自动完成功能吗?
我查看了 UITextInputTraits Here 的文档,但似乎没有任何效果。
最后的手段是禁用 html 标记中的自动完成功能,但这需要在后端进行大量工作。
有没有办法为应用全局禁用自动完成功能?
提前致谢。
【问题讨论】:
【参考方案1】:我认为没有办法用 ios 代码做到这一点。但是,我可能错了。
你可以尝试每次加载网页时在webview中运行下面的JS
var textFields = document.getElementsByTagName('input');
if (textFields)
var i;
for( i = 0; i < textFields.length; i++)
var txtField = textFields[i];
if(txtField)
txtField.setAttribute('autocomplete','off');
txtField.setAttribute('autocorrect','off');
txtField.setAttribute('autocapitalize','off');
txtField.setAttribute('spellcheck','false');
在我看来,这应该可以完成这项工作,而无需您在服务器中进行更改:)
很想知道这是否适合你
【讨论】:
并非所有输入标签都是文本字段,输入类型也可以是文件、日期/时间、电子邮件、电话号码、图片、收音机、复选框、月份等。【参考方案2】:我已经搜索了很多这个问题。如果您想完全禁用它,那么您必须使用<textarea>
而不是<div contenteditable="true">
并将其加载到UIWebview
。试试下面的代码:
<textarea id="content" spellcheck="false" autocorrect="off" autocomplete="off"></textarea>
通过使用此代码,预测文本和自动完成都将退出。
【讨论】:
【参考方案3】:如果您使用的是 WKWebView,请使用此函数:
func RemoveAutoCompleteFromWebView(webView: WKWebView)
let script: String = """
var textFields = document.getElementsByTagName('input');
if (textFields)
var i;
for( i = 0; i < textFields.length; i++)
var txtField = textFields[i];
if(txtField)
txtField.setAttribute('autocomplete','off');
txtField.setAttribute('autocorrect','off');
txtField.setAttribute('autocapitalize','off');
txtField.setAttribute('spellcheck','false');
"""
webView.evaluatejavascript(script, completionHandler: nil)
这将运行在新类型的 WebView 中禁用自动完成所需的 JavaScript。只需传入你想要的 WKWebView。
【讨论】:
【参考方案4】:斯威夫特 4
func disableAutocomplete()
let disableAutocompleteScript: String = """
var textFields = document.getElementsByTagName('textarea');
if (textFields)
var i;
for( i = 0; i < textFields.length; i++)
var txtField = textFields[i];
if(txtField)
txtField.setAttribute('autocomplete','off');
txtField.setAttribute('autocorrect','off');
txtField.setAttribute('autocapitalize','off');
txtField.setAttribute('spellcheck','false');
"""
webView.stringByEvaluatingJavaScript(from: disableAutocompleteScript)
【讨论】:
虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。以上是关于在 UIWebView/WKWebview 中禁用自动完成的主要内容,如果未能解决你的问题,请参考以下文章
UIWebview/WKWebView javascript调用处理两个返回值?