在 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】:

我已经搜索了很多这个问题。如果您想完全禁用它,那么您必须使用&lt;textarea&gt; 而不是&lt;div contenteditable="true"&gt; 并将其加载到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 的内容?

UIWebview/WKWebView javascript调用处理两个返回值?

UI11上的UIWebView / WKWebView崩溃(用完可执行内存)

WKWebView

iOS学习笔记14-网络WebView

WKWebView 那些坑