为什么通过用户脚本设置autocomplete =“on”仍然不允许在Chrome中存储密码?

时间:2011-02-09 03:20:15

标签: google-chrome google-chrome-extension greasemonkey

我的目标是在Google Chrome中使用Greasemonkey-style user script,以便记住设置了autocomplete="off"属性的特定表单上的密码。

Chrome的开发者工具表明脚本已成功设置autocomplete="on",但这不会产生允许在表单上存储密码的预期效果。

为什么这不起作用?


实施例

Chrome提供记住在此测试页上输入的密码(预期):

<html><body><form action="">
    <input type="text" name="username" />
    <input type="password" name="password" />
    <input type="submit" name="submit" value="Log In" />
</form></body></html>

Chrome无法记住在此测试页上输入的密码(预期):

<html><body><form action="">
    <input type="text" name="username" />
    <input type="password" name="password" autocomplete="off" />
    <input type="submit" name="submit" value="Log In" />
</form></body></html>

Chrome的 Inspect Element 工具显示用户脚本(预期)成功修改了上述测试页面:

<html><head></head><body><form action="" autocomplete="on">
    <input type="text" name="username" autocomplete="on">
    <input type="password" name="password" autocomplete="on">
    <input type="submit" name="submit" value="Log In">
</form></body></html>

Chrome修改后仍然无法记住密码(意外)。

2 个答案:

答案 0 :(得分:1)

作为实验,请尝试此书签,清除自动填充并弹出此对话框(典型): Results dialog from bookmarklet

javascript:(function%20(){var%20zCurrentElement=document.activeElement;var%20cfa,cea,cs,df,fe,i,j,sf,se;cfa=cea=cs=0;df=document.forms;for(i=0;i<df.length;i++){sf=df[i];fe=sf.elements;if(sf.onsubmit){sf.onsubmit='';cs++;}if(sf.attributes.autocomplete){sf.attributes.autocomplete.value='on';++cfa;}for(j=0;j<fe.length;j++){se=fe[j];if(se.attributes.autocomplete){se.attributes.autocomplete.value='on';cea++;}}}var%20zNode=document.createElement('div');zNode.setAttribute('id','idAPW_NotifWindow');zNode.innerHTML='<p>Removed:</p>'+'<ul>'+'<li>"autocomplete=off"%20from%20'+cfa+'%20form(s)<br>'+'%20and%20from%20'+cea+'%20form%20element(s).'+'<li>onsubmit%20from%20'+cs+'%20form(s).'+'</ul>'+'<p>After%20you%20type%20your%20password%20and%20submit%20the%20form,%20the%20browser%20will%20offer%20to%20remember%20your%20password.</p>'+'<style%20type="text/css">'+'#idAPW_NotifWindow'+'{'+'position:%20%20%20absolute;'+'visibility:%20visible;'+'margin:%205px;'+'padding:0em%202em%202em%202em;'+'max-width:%20%20400px;'+'background-color:%20%20%20orange;'+'border:%203px%20double;'+'font-size:%20%2014px;'+'text-align:%20left;'+'opacity:0.97;'+'z-index:1000;'+'cursor:%20pointer;'+'}'+''+'#idAPW_NotifWindow%20p,%20#idAPW_NotifWindow%20ul,%20#idAPW_NotifWindow%20li'+'{'+'margin:%200;'+'padding:%200;'+'line-height:130%;'+'}'+'#idAPW_NotifWindow%20p'+'{'+'padding:1em%200%200%200'+'}'+'#idAPW_NotifWindow%20ul'+'{'+'padding:0%200%200%202em;'+'}'+'#idAPW_NotifWindow%20li'+'{'+'margin:%200%200%200.5em%200;'+'}'+'</style>';zNode.style.top=window.scrollY+'px';zNode.style.left=window.scrollX+'px';document.body.appendChild(zNode);zNode.addEventListener("click",function(){var%20zNode=document.getElementById('idAPW_NotifWindow');if(zNode)zNode.style.visibility='hidden';},false);if(zCurrentElement){if(/input/i.test(zCurrentElement.tagName)){zCurrentElement.blur();zCurrentElement.focus();}}})();


如果可行,则GM脚本可能缺少表单级autocomplete="off",或者页面中某处可能有onsubmit处理程序。

如果它不起作用,则Chrome中可能无法执行此任务。 (注意类似的GM和小书签在Firefox中都可以正常工作。:))

答案 1 :(得分:1)

Autocomplete=on是我安装的第一批扩展程序之一。我建议您阅读它的来源,因为它包含来自Chromium内部人员的一些评论。问题是Chrome会在特定时间检查所有自动填充属性,因此该脚本会在加载DOM时运行,但在Chrome检查自动填充之前运行。

虽然有一些新评论表明该扩展程序在Chrome 9中不起作用。或许这值得进一步调查。