我正在将一个chrome扩展移植到firefox,并希望保留尽可能多的代码。我正在使用sdk并且我是JavaScript的新手,所以如果它只是一个没有错误的错误请耐心等待;)
我需要通过内容脚本中的几个XMLHttpRequests获取一些内容。
做事的“firefox-way”将是使用sdk-request-api并通过主要脚本和内容脚本之间的消息工作,如so。除了这对我来说在整个插件中实现这一点意味着很多工作这一事实,我还需要获得二进制数据,这似乎是不可能的。
此处的解决方法记录为here。我宁愿避免这种情况,因为我觉得我现在读到的是它现在是一个测试版功能,它看起来非常“适合”。
理想情况下,我想以this的方式实现它。在即将推出的Firefox 24中,应该可以允许内容脚本访问某些域。因此我现在正在使用Firefox Aurora。我将以下代码添加到 package.json :
"permissions": {
"cross-domain-content": ["http://mozilla.org"]
}
我的 main.js 在单击按钮时会创建一个面板并将脚本加载到其中:
var testPanel = require("sdk/panel").Panel({
contentURL: data.url("pages/background.html"),
contentScriptFile: [data.url("util/jquery-1.8.2.min.js"), data.url("pages/xhrTest.js")]
})
testPanel.show();
这是我的 xhrTest.js :
var xhr = new XMLHttpRequest();
xhr.open("GET","http://mozilla.org",true);
xhr.onerror = function () {
console.log("Error");
};
xhr.onload = function () {
console.log("loaded");
}
xhr.send();
在调试时,它会从状态2跳转到4,响应为空,并调用“onerror”。状态为0,statustext为空,我没有看到任何其他错误指示。 现在我不知道这是否仍然是同源政策阻止我,或者我是否做了别的错误?
我真的很感激我能得到的任何帮助:)
提前致谢,
FABI
答案 0 :(得分:2)
嗯,我真的看不出一个明显的错误。这是一个基于 工作的文档的示例插件,至少它在Firefox 24 Beta中适用于我:
Main.js:
// main.js
var data = require("sdk/self").data;
var panel = require("sdk/panel").Panel({
height: 250,
contentURL: data.url("panel.html"),
contentScriptFile: data.url("panel-script.js")
});
panel.on("show", function(){
panel.port.emit("show");
});
require("sdk/widget").Widget({
id: "test-widget",
label: "Test-Widget",
contentURL: "http://www.mozilla.org/favicon.ico",
panel: panel
});
Panel.html:
<!doctype HTML>
<html>
<meta charset="utf-8">
<head></head>
<body>
<pre id="forecast_summary"></pre>
</body>
</html>
内容脚本:
// panel-script.js
var url = "https://hn-test.firebaseio.com/articles/e5b10c82600b51732af584583a7f57c4a7c01bff.json";
self.port.on("show", function () {
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.onload = function () {
var element = document.getElementById("forecast_summary");
// formatting
var pretty = JSON.stringify(JSON.parse(request.responseText), null, ' ');
element.textContent = pretty;
};
request.send();
});
的package.json:
{
"name": "jp-crossdomain-xhr",
"fullName": "jp-crossdomain-xhr",
"id": "jid1-B2RaQxOBKox8wA",
"description": "a basic add-on",
"author": "",
"license": "MPL 2.0",
"version": "0.1",
"permissions": {
"cross-domain-content": ["https://hn-test.firebaseio.com"]
}
}