ユーザーがログインした後でも「パスワードの保存」バブルが表示されないようにする必要があります。
Autocomplete = offは答えではありません。
この問題に対する安全なソリューションを提供する投稿はありません。 Chromeでパスワードバブルを無効にする方法は本当にありませんか?
「サポートされている」方法はありません。
パスワードコンテンツを非表示フィールドにコピーし、送信する前にパスワード入力を削除しました。
送信時にページにパスワードフィールドがないため、ブラウザは保存を要求しません。
私のjavascriptコード(jqueryを使用)は次のとおりです。
function executeAdjustment(){
$("#vPassword").val($("#txtPassword").val());
$(":password").remove();
var myForm = document.getElementById("createServerForm");
myForm.action = "executeCreditAdjustment.do";
myForm.submit();
}
何時間も検索した後、私は独自のソリューションを思い付きました。これはChrome=とSafariで動作するようです(ただし、FirefoxまたはOperaではなく、IEのテストは行っていません))。トリックは、パスワードフィールドを2つのダミーフィールドで囲むことです。
<input type="password" class="stealthy" tabindex="-1">
<input type="password" name="password" autocomplete="off">
<input type="password" class="stealthy" tabindex="-1">
私が使用したCSSは次のとおりです。
.stealthy {
left: 0;
margin: 0;
max-height: 1px;
max-width: 1px;
opacity: 0;
outline: none;
overflow: hidden;
pointer-events: none;
position: absolute;
top: 0;
z-index: -1;
}
注:ダミー入力フィールドは、フィールド自体が非表示ではなく囲まれている場合でも、ブラウザーがそれを検出して非表示フィールドを無視するため、display: none
で非表示にできなくなりました隠しラッパーで。したがって、入力フィールドを「非表示」にせずに基本的に非表示およびクリック不可にするCSSクラスの理由。
<input type="password" style="display:none"/>
をフォームの上部に追加します。 Chromeのオートコンプリートは、最初に見つかったパスワード入力とその前の入力を埋めるので、このトリックでは、重要ではない不可視の入力のみを埋めます。
最良の解決策は、値をアスタリスクまたはドットで手動で置き換えて、入力テキストで入力パスワードをシミュレートすることです。
<input type="textbox" id="UserID" />
<input type="password" style="display:none"/>
<input type="textbox" id="password" />
<script>
function init() {
$('#password').replaceWith('<input type="password" id="password" />');
}
</script>
firefoxでテストし、chrome期待通りに動作します。
これを次のマークアップで処理しました。
#txtPassword {
-webkit-text-security: disc;
}
<form autocomplete="off">
<input type="text" name="id" autocomplete="off"/>
<input type="password" id="prevent_autofill" autocomplete="off" style="display:none" tabindex="-1" />
<input type="password" name="password" id="txtPassword" autocomplete="off"/>
<button type="submit" class="login100-form-btn">Login</button>
</form>
私が必要とするすべての利点を備えた代替手段は見つからなかったので、新しいものを作成しました。
HTML
<input type="text" name="password" class="js-text-to-password-onedit">
jQuery(jQueryを使用しない場合は、同じロジックのVanilla JSに置き換えてください)
$('.js-text-to-password-onedit').focus(function(){
el = $(this);
el.keydown(function(e){
if(el.prop('type')=='text'){
el.prop('type', 'password');
}
});
// This should prevent saving Prompt, but it already doesn't happen. Uncomment if nescessary.
//$(el[0].form).submit(function(){
// el.prop('readonly', true);
//});
});
利点:
PrimeFacesを使用した独自のjQueryソリューション。 ChromeおよびInternet Explorerで動作しますが、Firefoxでは動作しません)
<script type="text/javascript" charset="utf-8">
$(function(){
$('#frmLogin').on('submit',function(e){
$(PrimeFaces.escapeClientId('frmLogin:usuario')).replaceWith('<label id="frmLogin:usuario1" type="text" name="frmLogin:usuario1" autocomplete="off" class="form-control" maxlength="8" tabindex="2"/>');
$(PrimeFaces.escapeClientId('frmLogin:password')).replaceWith('<label id="frmLogin:password1" type="password" name="frmLogin:password1" autocomplete="off" value="" tabindex="3" class="form-control"/>');
$(PrimeFaces.escapeClientId('frmLogin:password1')).attr("autocomplete","off");
$(PrimeFaces.escapeClientId('frmLogin:usuario1')).attr("autocomplete","off");
$(PrimeFaces.escapeClientId('frmLogin:password_hid')).attr("autocomplete","off");
$(PrimeFaces.escapeClientId('frmLogin:usuario_hid')).attr("autocomplete","off");
});
});
</script>
<h:inputSecret id="password" value="#{loginMB.password}" class="form-control"
placeholder="Contraseña" tabindex="3" label="Contraseña" autocomplete="off" disabled="#{loginMB.bdisabled}"/>
<p:inputText value="#{loginMB.password_hid}" id="password_hid" type="hidden" />
2つの通常のテキストボックスを使用して、これを覆しました。 1つは実際のパスワードを含み、もう1つはマスクとして機能します。次に、パスワードボックスの不透明度を0に設定し、マスクテキストボックスを無効にします-しかし、背景色は白に設定されて有効になっています。次に、マスクボックスの上にパスワードボックスを配置します。 jscript関数では、マスクのテキスト値を更新して、パスワードボックスでキーを押すたびに「*」文字の文字列を表示します。 2つの欠点:カーソルの点滅は、ブラウザによっては表示される場合があります。 IEでは表示されますが、ChromeまたはFirefoxでは表示されません。ユーザーが入力しているときに少し遅れがあります。
私のコードスニペットはaspにあります:
$(window).ready(function() {
var pw = $('#txtPassword');
var mask = $('#txtMask');
$(pw).css('opacity', '0');
$(pw).keyup(function() {
var s = '';
for (var i = 0; i < $(pw).val().length; i++)
s = s + '*';
mask.val(s);
})
});
style... .password {
font-family: monospace;
position: absolute;
background-color: white;
}
Asp.net code:
<asp:TextBox runat="server" CssClass="password" Width="300" ID="txtMask" ClientIDMode="Static" MaxLength="30" Enabled="false" />
<asp:TextBox runat="server" CssClass="password" Width="300" ID="txtPassword" ClientIDMode="Static" MaxLength="30" />
私のために働いた唯一のことは、ドキュメントの準備ができた後に入力値にスペースを追加し、ユーザーが入力に注目したときにスペースを削除することでした。
$('.login-input').val(' ');
$('.login-input').on('focus', function() {
$(this).val('');
});
シンプルで簡単。動作するChrome64。Firefoxで必要なのはautocomplete="off"
属性の入力。
まず第一に私はあなたに何かを伝えたいです。 [input type="text"]
および[input type="password"]
主要なブラウザはそのためのポップアップを提供します。
次に、[input type="password"]
から[input type="text"]
その後、そのためのCSSがあります
#yourPassTextBoxId{
-webkit-text-secutiry:disc
}
通常のページ内でサポートのみのログインページで作業するときに、ブラウザーがパスワードの動作を強制する方法について2つの問題がありました(サポートログインを保存しないでください)。
だから、私はさまざまなstackoverflowの投稿で見つけた2つのソリューションを組み合わせて、ここに投稿すると思いました。私はjQueryを使用していますが、原則は通常のJavaScriptにも変換できます。
まず、パスワードフィールドをテキストフィールドとして開始し、後でJavaScriptで変更します。これにより、ブラウザーが保存されたパスワードを提供しない可能性が十分にあります。
次に、フォームを送信する直前に、パスワードフォームをテキストフィールドに戻しますが、パスワードが見えないように最初に非表示にします。これは、パスワードフィールドが消えたときに別のテキストフィールドを追加することで見栄えを良くすることができますが、それは見た目だけです。
<form id="techForm" action="...">
<input type="text" id="username" name="username">
<input type="text" id="password" name="password"> <!-- this needs to start as a text field -->
<input type="submit" name="submit" value="submit">
</form>
<script type="text/javascript">
$(function()
{
$('#password').on('focus', function()
{
$(this).prop('type', password'); // this stops pre-saved password offers
});
$('#techForm').on('submit', function()
{
$('#password').hide().prop('type', 'text'); // this prevents saving
});
});
</script>
これはFirefoxで機能し、Chrome 2017年9月12日現在。