【问题标题】:How to disable browser default password pop-up?如何禁用浏览器默认密码弹出窗口?
【发布时间】:2010-07-26 07:13:55
【问题描述】:
  1. 我正在开发一个谷歌浏览器插件。
  2. 在选项页面下,我正在向需要密码的服务器运行 AJAX 请求
  3. 如果密码不正确,我只想捕捉错误,但浏览器会弹出一个窗口。

alt text http://img834.imageshack.us/img834/2905/browserproblem.png

我可以禁用它吗?如何禁用?

【问题讨论】:

    标签: javascript html google-chrome


    【解决方案1】:

    问题是您没有对您发送的用户名(即身份验证令牌)和(虚拟)密码进行 Base64 编码(这是 HTTP 基本身份验证方案的要求)。您的代码大致如下所示:

    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://onsip.highrisehq.com/account.xml');
    xhr.setRequestHeader('Authorization', 'Basic ' + btoa(token + ':'));
    xhr.onreadystatechange = function() { console.log(xhr.responseText); };
    xhr.send();
    

    (我已将'onsip' 换成您的子域,但您仍需要将token 替换为您的身份验证令牌。)

    【讨论】:

    • 不太确定是这种情况 try var xhr = new HMLHttpRequest(); xhr.open('GET', 'UrlToServerThatUsesBasicHttpAuthentication', true, Login, WrongPassword); xhr.send();
    • byoogle 想告诉你的可能是在 37signals.com 上使用基于 POST 的身份验证,而不是基于 GET 的基本身份验证?
    • 正确,您应该使用“POST”。我通过对 Highrise 登录页面运行数据包嗅探器获得了上面的参数,因此它们应该与页面发送的完全匹配(如果您查看页面源,您会看到表单方法设置为“POST”而不是“GET” )。我建议您尝试复制我传入的参数,因为它们对我有用。
    • 查看 Highrise 的 API(developer.37signals.com/highrise),因为我并没有真正使用“用户名”和“密码”,而是“令牌”和“虚拟密码”,我会尝试发布消息,然后给你反馈。
    • 哦,不知道他们的 API。我以为你在刮屏。您绝对应该继续使用 API(不那么脆弱)!我知道你现在的问题是什么——解决方案将在我编辑的答案中。
    【解决方案2】:

    我知道有两种方法可以在 Firefox XUL 代码(但不是 Web 代码)中执行此操作,我知道其中一种不适用于 Google chrome,而快速测试似乎表明另一种也不适用。

    我想到了三个选项。

    1. 在可访问的服务器(最好是同一个)上有一个密码检查页面,当被查询(当然是通过安全连接)时,该页面会回复用户/密码组合是否正确的指示。如果您不是与运行此服务的服务器相关的人,我会为您这样做感到委屈,尽管成千上万的人让 facebook 等。一直在做这种事!另一方面,很难说服人们不要傻到让 facebook 等人。一直这样做,所以另一个人做同样的事情无济于事。
    2. 不要向您的用户询问他们的密码,内置提示将在所有情况下使用,并成为“普通”用户/密码。就个人而言,我对你甚至在做 Basic 的想法感到更高兴,因为它是通过加密通道而不是看起来像表单身份验证的(不像我对 Digest 或其他隐藏一些密码的模型那么高兴协议),因为虽然两者都可以用发送的密码做一些奇怪和愚蠢的事情,但经验表明,表单更有可能是由“我当然可以安全地编码,要考虑什么?”的人创建的。比任何其他方案。
    3. 如果是您自己的服务器,您可以使用 401 以外的其他密码来响应错误密码,并将其用作脚本中的信号以重新查询。最好为此设置一个特殊的“登录”URI,以免 XMLHttpRequest 的这种混乱干扰行为更好的客户端。

    【讨论】:

    • Re: #3,在大多数浏览器中,缺少 WWW-Authenticate 标头会阻止身份验证弹出窗口,即使状态为 401。当然,没有 WWW-Authenticate 标头的状态 401 违反规范...但是对于身份验证失败,返回 401 以外的内容也是如此。这就是为什么这是一个kludge。真的,XmlHttpRequest 对象应该有一个设置来禁用该弹出...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2018-09-12
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2016-10-20
    • 2020-07-27
    相关资源
    最近更新 更多