我目前正在为 Firefox 编写一个插件,它使用 XMLHttpRequest
向远程服务器发送一些 HTTP 请求。但是,我遇到了以下限制:
XMLHttpRequest
透明地遵循 HTTP 3xx 重定向(这是不需要的)XMLHttpReques
t 会忽略某些 header (例如User-Agent
)的setRequestHeader
- HTTP 基本身份验证也由浏览器处理 - 提示用户输入凭据,但无法禁用此行为
出于这些原因(可能还有其他原因),我正在寻找一种替代方法来从 Firefox 插件内发送 HTTP 请求。我在 MDN 上浏览了很多,但没有找到任何可以满足我需求的东西。
是否存在这样的类?
注意:我没有使用 SDK。
最佳答案
我会继续使用 XHR
,但设置自己的通知回调并直接在 channel 上操作 header 。
每个XHR
都有一个 channel ,(通常)是nsIHttpChannel
这也是 nsIHttpChannelInternal
(除其他外)。
例如以下内容应涵盖您的第二点。
var req = new XMLHttpRequest();
if (req.channel instanceof Ci.nsIHttpChannel) {
req.channel.setRequestHeader("User-Agent", "helloworldbot/1.0", false);
}
我implemented notifications callbacks不久前在 Scriptish 中允许用户忽略重定向,这或多或少是您的第一点。
auth 的东西有点令人讨厌。您可以将 XHR.open()
与可选的用户/密码参数一起使用,或者自己构建 auth header 和/或实现 nsIAuthPrompt
/nsIPrompt
通过通知回调。
如果 XHR
存在其他问题,您仍然可以转到普通的低级 channel
(nsIIOService.newChannel...()
),尽管 XHR 提供的所有好处都不再存在了。
由于您的问题太不具体,我现在不会详细说明。
关于javascript - 可用于 Firefox 附加组件的 XMLHttpRequest 的更强大替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927949/