抑制浏览器的身份验证对话框

8

抱歉,已经有类似的问题,但我想更广泛地提出这个问题。

是否有任何方法在Web应用程序客户端确定请求资源是否返回401状态码,并导致浏览器显示丑陋的身份验证对话框?

或者,是否有任何方法在flash中加载mp3音频资源,在401状态码的情况下无形地失败,而不是让浏览器显示丑陋的对话框?

如果我设置URLRequest对象的“authenticate”属性,则Adobe Air运行时将禁止身份验证,但此属性不存在于Flash运行时中。可以使用任何在客户端上工作的解决方案。 XMLHttpRequest 不太可能起作用,因为问题资源将位于不同的域中。

重要的是要在失败时无形地处理,因为该应用程序将尝试许多音频资源列表,如果有其他可用资源,则没有必要打扰用户尝试进行身份验证。重要的是解决方案能够在客户端上工作,因为所涉及的 mp3 来自我无法控制的各种服务器。

4个回答

1

我也遇到了Twitter API的同样问题 - 任何受保护的用户都需要客户端进行身份验证。

我能想到的唯一解决方案是在服务器端加载页面,并返回带有其HTTP响应代码的URL列表。


1
Twitter API有一个suppress_response_codes参数,它将强制响应具有200 OK状态。 - Jaka Jančar

0

在 Web 应用程序的客户端上,有没有任何方法可以确定请求资源是否会返回 401 状态码并导致浏览器显示丑陋的身份验证对话框?

一般来说,没有。401 响应是服务器指示需要进行身份验证的唯一标准方式。


0

只需将可能需要身份验证的资源访问包装到Ajax调用中。您可以捕获响应代码,并使用JavaScript执行任何操作(例如播放声音)。如果响应代码正确,则使用JavaScript将用户转发到该资源。

最有可能这种方法会在服务器上产生稍微更多的负载(在某些情况下,您可能不得不多次加载相同的资源),但它应该可以工作。任何关于如何使用XMLHttpRequest的好教程都应该包含您所需的所有内容。例如,请查看http://www.xul.fr/en-xml-ajax.html


Ajax在不同的域之间无法工作,因此只有当页面和资源在同一个域上时才能正常工作。 - zaius

0
如果您使用URLRequest来获取文件,则不仅会遇到优雅的错误处理,而且会遇到Flash和AIR运行时中根本性的差异。
如果使用URLRequest对象来检索文件,则每次请求每个未设置策略文件以允许此类请求的服务器都会从Flash中获得安全错误。 AIR允许这些请求,因为它基本上是客户端。 这是有道理的,因为这是安装应用程序和访问网页之间的区别。
我不想提供非答案,但是如果您无法进行服务器端调用并且正在访问一系列“未知”服务器,那么这将是一条艰难的路。
但也许我误解了,您只是想链接到文件并防止用户获取错误链接,还是要实际加载文件?

无论我是否能得到我想要的,感谢您的时间。是的,我正在尝试加载它们并播放它们。不过,任何特定的URL是否有效并不重要,因为我有很多要尝试。 - Joe Langeway

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接