【问题标题】:Cannot send cross-domain AJAX from panel无法从面板发送跨域 AJAX
【发布时间】:2014-10-25 22:54:32
【问题描述】:

我正在制作一个 Firefox 插件,我正在尝试从一个 Firefox 插件面板向网站发出 AJAX 请求。

这是我目前所拥有的:

package.json

{
  //[...]
  "permissions": {
    "cross-domain-content": ["http://www.website.com", "https://www.website.com"]
  }
}

main.js

var data = require("sdk/self").data;

var extension_panel = require("sdk/panel").Panel({
  contentURL: data.url("menu.html"),
  contentScriptFile: data.url("menu.js")
});
//[...]

menu.js

//[...]
$.ajax({
    type: "GET",
    url: "https://www.website.com/currentUser",
    success: function(e){
        $("#loading").hide();
    },
    error: function(e){
        $("#loading").hide();
        if (e.status == 401){
            show_login();
            return;
        }
        show_login();
        $("#login-error").text("Couldn't check login status!").show();
    }
});
//[...]

每次我运行这个插件时,它都会不断地给出Couldn't check login status! 消息。 当我记录错误对象时,status404statusText"error"

我想我已经在package.json 中正确设置了所有内容,那么为什么插件不允许我发出 AJAX 请求?

编辑

404 在这种情况下并不意味着 URL 不存在。在这个扩展程序的 Chrome 版本中,一切正常,所以我知道网站在最后一刻没有改变。

【问题讨论】:

  • @dandavis 是的,但是在这个插件的 Chrome 版本中,URL 工作得很好。
  • 可能还需要额外的标题。检查 API 文档
  • @charliefl 什么标题?当用户登录时,网站会返回一个200,而其他所有请求都会返回一个401
  • 看起来您正在使用 jquery。因此,ajax 不是来自“背景”页面(google chrome ext dev lingo),而是来自页面本身,这当然不允许跨域 xhr。您必须从非 contentScript 范围 xhr,这应该可以。我不熟悉插件 sdk,所以我不确定 package.json 中的 cross-domain-content 是如何工作的,但我添加了 sdk 标记,应该可以让你得到更好的回复
  • @dandavis 我已经进行了调试。没有任何有用的东西出现。

标签: jquery ajax firefox-addon firefox-addon-sdk


【解决方案1】:

据我了解,这似乎是 Addon SDK 中的一个错误。

使用cfx run 调试扩展会出于某种原因禁用XHR,所以如果我要运行安装打包的.xpi 扩展,XHR(和其他所有东西)会再次工作。

【讨论】:

猜你喜欢
  • 2016-12-01
  • 2015-04-22
  • 1970-01-01
  • 2019-10-10
  • 2015-04-28
  • 2012-12-04
  • 2014-07-16
  • 2014-11-24
  • 2011-12-31
相关资源
最近更新 更多