以 HTML 形式阻止三星预测文本
Prevent Samsung predictive text in HTML form
我有一个带有文本输入字段的 HTML 表单。在用户键入时,我们会根据数据库中的值列表发出 AJAX 请求以获取预测文本建议。
我们显示该列表,用户可以select其中之一;然后我们向他们展示表格的其余部分。
如果您在 Samsung Galaxy S4 的内置浏览器或 Chrome 或 Firefox 上查看我们的网页,设备的预测输入建议也会在用户键入时显示。例如看截图:
个人用户可以很容易地在自己的设置中禁用此功能phone。但是,我们希望它始终对所有用户禁用此字段。我们已经在做以下所有事情,但似乎并不能阻止它出现:
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">
有什么建议吗?
我尝试了不同的方法,但目前在移动设备上您似乎没有机会以正确的方式执行此操作。
根据 Safari 开发者文档,有支持 https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/Attributes.html,但似乎这与桌面 Safari 的关系比 iOS 更相关。
此外,拼写检查可以做到,但目前,根据 http://caniuse.com/#feat=spellcheck-attribute :
The partial support in mobile browsers results from their OS generally
having built-in spell checking instead of using the wavy underline to
indicate misspelled words. spellcheck="false" does not seem to have
any effect in these browsers.
将输入类型设置为密码可以获得您想要的行为,但您必须恢复并显示文本。下面的测试页面已经接近尾声,但仍然需要一些爱。隐藏点会使光标消失。祝你好运。问题显然是三星忽略了实现属性,所以我觉得你忽略这一点是可以原谅的。
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<style>
input[type="password"] {
cursor : url(cursor.png),auto;
color : rgba(0,0,0,0);
}
</style>
</head>
<body>
<form>
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" id="under" /><br />
<div id="over" style="position:absolute; left:10px; top:10px"></div>
</form>
<script>
function textChanged(event) {
document.getElementById('over').innerHTML = document.getElementById('under').value;
}
document.getElementById('under').addEventListener('keyup', textChanged);
</script>
</body>
</html>
我无法测试这个,因为我没有三星 phone,但是你试过 name="password" 这个技巧了吗?
Turning off auto-complete for textarea and inputfields in Android Cordova-app
将字段设置为密码会禁用自动完成、自动更正...以及所有上述行为。输入输入后,我将其改回文本。 oninput 事件对我来说至关重要。
<input id="myinput" oninput="changeInputType(this)" type="password"/>
<script>
function changeInputType(input) {
input.type = 'text';
}
</script>
我做了一些研究,在当前的 webkit 浏览器中,不允许在 input[type="password"]
字段上重新定义 -webkit-text-security
属性。
所以,根据 user1585345 的回答,我做了一个改进的方法。这非常 hacky,但在某些情况下就足够了。
它包括创建一个输入密码,您可以在其中键入,以及一个输入文本,当第一个输入更改时,该文本后面也会更改。您还可以看到光标因样式而显示。
var textInput = document.querySelector('.unpredictable-input input[type="text"]');
var passwordInput = document.querySelector('.unpredictable-input input[type="password"]');
passwordInput.addEventListener('input', function() {
textInput.value = passwordInput.value;
if(navigator.userAgent.match(/Android/)) {
passwordInput.style.letterSpacing =
(2.6 + passwordInput.value.length * 0.05) + 'px';
}
}, false);
.unpredictable-input {
position: relative;
width: 150px;
}
.unpredictable-input input {
position: absolute;
width: 100%;
}
.unpredictable-input input[type="text"] {
font-family: monospace;
}
.unpredictable-input input[type="password"] {
color: black;
user-select: none;
-webkit-text-fill-color: transparent;
background: transparent;
letter-spacing: 2.5px;
padding: 3px;
border: 0;
}
<div class="unpredictable-input">
<input type="text" />
<input type="password" />
</div>
Samsung 预测文本服务不会考虑 HTML5 属性。
我已向三星开发者论坛报告并请求官方修复:http://developer.samsung.com/forum/thread/predictive-text-service-not-honoring-auto-correct-attribute/201/315078?boardName=SDK&startId=zzzzz~
如果您遇到此问题,请共同努力推动官方修复。
对于数字输入,type="tel" 解决了问题
在 vuejs 中我计算了 属性
inputType(){
if(this.inputTypeState){
return 'text'
}
return 'password'
}
在数据()中我有
this.inputTypeState = false
我有模板
<input
:type="inputType"
@input="inputTypeState = true"
>
它有效,只是你没有三星自动完成功能,如果你想要网络和三星自动完成功能,可以尝试随意输入=文本,然后将值传输到我上面定义的不同输入,然后第一个输入将负责构建在自动完成和第二个 - 用于网站自动完成。
booking.com 已经解决了 有趣的是他们使用了什么方法
我有一个带有文本输入字段的 HTML 表单。在用户键入时,我们会根据数据库中的值列表发出 AJAX 请求以获取预测文本建议。
我们显示该列表,用户可以select其中之一;然后我们向他们展示表格的其余部分。
如果您在 Samsung Galaxy S4 的内置浏览器或 Chrome 或 Firefox 上查看我们的网页,设备的预测输入建议也会在用户键入时显示。例如看截图:
个人用户可以很容易地在自己的设置中禁用此功能phone。但是,我们希望它始终对所有用户禁用此字段。我们已经在做以下所有事情,但似乎并不能阻止它出现:
<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">
有什么建议吗?
我尝试了不同的方法,但目前在移动设备上您似乎没有机会以正确的方式执行此操作。
根据 Safari 开发者文档,有支持 https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/Attributes.html,但似乎这与桌面 Safari 的关系比 iOS 更相关。
此外,拼写检查可以做到,但目前,根据 http://caniuse.com/#feat=spellcheck-attribute :
The partial support in mobile browsers results from their OS generally having built-in spell checking instead of using the wavy underline to indicate misspelled words. spellcheck="false" does not seem to have any effect in these browsers.
将输入类型设置为密码可以获得您想要的行为,但您必须恢复并显示文本。下面的测试页面已经接近尾声,但仍然需要一些爱。隐藏点会使光标消失。祝你好运。问题显然是三星忽略了实现属性,所以我觉得你忽略这一点是可以原谅的。
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<style>
input[type="password"] {
cursor : url(cursor.png),auto;
color : rgba(0,0,0,0);
}
</style>
</head>
<body>
<form>
<input type="password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" id="under" /><br />
<div id="over" style="position:absolute; left:10px; top:10px"></div>
</form>
<script>
function textChanged(event) {
document.getElementById('over').innerHTML = document.getElementById('under').value;
}
document.getElementById('under').addEventListener('keyup', textChanged);
</script>
</body>
</html>
我无法测试这个,因为我没有三星 phone,但是你试过 name="password" 这个技巧了吗?
Turning off auto-complete for textarea and inputfields in Android Cordova-app
将字段设置为密码会禁用自动完成、自动更正...以及所有上述行为。输入输入后,我将其改回文本。 oninput 事件对我来说至关重要。
<input id="myinput" oninput="changeInputType(this)" type="password"/>
<script>
function changeInputType(input) {
input.type = 'text';
}
</script>
我做了一些研究,在当前的 webkit 浏览器中,不允许在 input[type="password"]
字段上重新定义 -webkit-text-security
属性。
所以,根据 user1585345 的回答,我做了一个改进的方法。这非常 hacky,但在某些情况下就足够了。
它包括创建一个输入密码,您可以在其中键入,以及一个输入文本,当第一个输入更改时,该文本后面也会更改。您还可以看到光标因样式而显示。
var textInput = document.querySelector('.unpredictable-input input[type="text"]');
var passwordInput = document.querySelector('.unpredictable-input input[type="password"]');
passwordInput.addEventListener('input', function() {
textInput.value = passwordInput.value;
if(navigator.userAgent.match(/Android/)) {
passwordInput.style.letterSpacing =
(2.6 + passwordInput.value.length * 0.05) + 'px';
}
}, false);
.unpredictable-input {
position: relative;
width: 150px;
}
.unpredictable-input input {
position: absolute;
width: 100%;
}
.unpredictable-input input[type="text"] {
font-family: monospace;
}
.unpredictable-input input[type="password"] {
color: black;
user-select: none;
-webkit-text-fill-color: transparent;
background: transparent;
letter-spacing: 2.5px;
padding: 3px;
border: 0;
}
<div class="unpredictable-input">
<input type="text" />
<input type="password" />
</div>
Samsung 预测文本服务不会考虑 HTML5 属性。
我已向三星开发者论坛报告并请求官方修复:http://developer.samsung.com/forum/thread/predictive-text-service-not-honoring-auto-correct-attribute/201/315078?boardName=SDK&startId=zzzzz~
如果您遇到此问题,请共同努力推动官方修复。
对于数字输入,type="tel" 解决了问题
在 vuejs 中我计算了 属性
inputType(){
if(this.inputTypeState){
return 'text'
}
return 'password'
}
在数据()中我有
this.inputTypeState = false
我有模板
<input
:type="inputType"
@input="inputTypeState = true"
>
它有效,只是你没有三星自动完成功能,如果你想要网络和三星自动完成功能,可以尝试随意输入=文本,然后将值传输到我上面定义的不同输入,然后第一个输入将负责构建在自动完成和第二个 - 用于网站自动完成。
booking.com 已经解决了 有趣的是他们使用了什么方法