我开始使用 addon-sdk 学习插件开发。我正在写一个显示当前网页 IP 地址的小插件脚本。
我使用了一个提供 JSON 数据值的网站。
http://dazzlepod.com/ip/stackoverflow.com.json
现在的问题是当我发出 XMLHttp 请求以获取它显示的 JSON 值时 0x80004005 (NS_ERROR_FAILURE)
Message: [Exception... "Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: .... ...... :: httpGet :: line 30" data: no]
这是我的脚本代码
function getDomainInfo(url) {
var a = document.createElement('a');
a.href = url;
var domain = a.hostname;
var requestURL = "http://dazzlepod.com/ip/"+domain+".json";
//alert(requestURL);
return httpGet(requestURL);
}
function httpGet(theUrl)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
return xmlhttp.responseText;
}
}
xmlhttp.open("GET", theUrl, false );
xmlhttp.send();
}
var check = self.port.on("clicked", function(url) {
var json = getDomainInfo(url);
//alert(json);
});
谁能解释为什么会这样,我该怎么办?
我是插件开发的新手。
谢谢。
GitHUb 链接 https://github.com/kannojia/show-ip
最佳答案
好的,我解决了这个问题。问题是由于 same origin policy,您无法在驻留在其他域时向其他域发出 XMLHttp 请求。 .
因此,当 contentScript 向服务器发出 XMLHttp 请求时,浏览器会抛出 NS_error_failure
。
我找到的解决方案是使用 Request API插件 SDK 。 Request 对象用于发出 GET、POST 或 PUT 网络请求。 Request 对象不受同源策略约束。
因此,我没有从 contentScript 发出 Http 请求,而是使用了请求 API 并获得了有效响应。
修改后的代码main.js:
var widgets = require("sdk/widget");
var tabs = require("sdk/tabs");
var data = require("sdk/self").data;
var Request = require("sdk/request").Request;
var url;
var domain_name;
var requestURL;
var showipWidget = widgets.Widget({
id : "show-ip",
label : "Display IP Address of current Page",
contentURL : data.url("lens_icon.png"),
contentScriptFile : [data.url("click_handler.js"),data.url("jquery-1.8.3.min.js")],
panel : infoPanel,
onClick : function() {
var curtab = tabs.activeTab;
url = curtab.url;
this.port.emit('getDomain',url);
}
});
showipWidget.port.on("setDomain", function(domain) {
domain_name=domain;
getDomainInfo(domain_name);
});
function getDomainInfo(domain) {
requestURL = "http://dazzlepod.com/ip/"+domain+".json";
//requestDomainInfo.get();
Request({
url: requestURL,
onComplete: function (response) {
var out = response.json;
console.log("Response: "+out.ip);
}
}).get();
}
和内容脚本 click_handler.js
function getDomain(url) {
var a = document.createElement('a');
a.href = url;
var domain = a.hostname;
return domain;
}
var check = self.port.on("getDomain", function(url) {
var domain = getDomain(url);
self.port.emit("setDomain",domain);
});
所有文件都在 GitHub 上。
谢谢大家的帮助。
关于javascript - 无法发出 http 请求 javascript ns 错误失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22589393/