在 UIWebView/WKWebview 中禁用自动完成
Disable autocomplete in UIWebView/WKWebview
我正在开发一个充当网络视图的简单应用程序。我需要在 web 视图中加载的任何内容上禁用自动完成和其他几个键盘功能。我知道如何在普通视图控制器中禁用每个 UITextInput 的自动完成,但我不知道你是否可以在 webview 上全局禁用自动完成?
我查看了 UITextInputTraits 的文档Here,但似乎无法正常工作。
最后的办法是在 HTML 标签中禁用自动完成功能,但这需要在后端进行大量工作。
有没有办法为应用程序全局禁用自动完成功能?
提前致谢。
我认为没有办法用 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');
}
}
}
在我看来,这应该可以完成工作,而无需在服务器中进行更改:)
想知道这是否适合您
我已经为这个问题搜索了很多。如果你想 完全禁用 它,那么你必须使用 <textarea>
而不是 <div contenteditable="true">
并将它加载到 UIWebview
中。试试下面的代码:
<textarea id="content" spellcheck="false" autocorrect="off" autocomplete="off"></textarea>
通过使用此代码,预测文本和自动完成 都将关闭。
Swift 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)
}
如果您使用的是 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)
}
这将 运行 JavaScript 在新型 WebView 中禁用自动完成所必需的。传入你想要的WKWebView即可。
我正在开发一个充当网络视图的简单应用程序。我需要在 web 视图中加载的任何内容上禁用自动完成和其他几个键盘功能。我知道如何在普通视图控制器中禁用每个 UITextInput 的自动完成,但我不知道你是否可以在 webview 上全局禁用自动完成?
我查看了 UITextInputTraits 的文档Here,但似乎无法正常工作。
最后的办法是在 HTML 标签中禁用自动完成功能,但这需要在后端进行大量工作。
有没有办法为应用程序全局禁用自动完成功能?
提前致谢。
我认为没有办法用 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');
}
}
}
在我看来,这应该可以完成工作,而无需在服务器中进行更改:)
想知道这是否适合您
我已经为这个问题搜索了很多。如果你想 完全禁用 它,那么你必须使用 <textarea>
而不是 <div contenteditable="true">
并将它加载到 UIWebview
中。试试下面的代码:
<textarea id="content" spellcheck="false" autocorrect="off" autocomplete="off"></textarea>
通过使用此代码,预测文本和自动完成 都将关闭。
Swift 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)
}
如果您使用的是 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)
}
这将 运行 JavaScript 在新型 WebView 中禁用自动完成所必需的。传入你想要的WKWebView即可。