我开始使用addon-sdk学习插件开发。我正在写一个小的插件脚本,该脚本显示当前网页的IP地址。
我使用了一个提供JSON数据值的网站。
http://dazzlepod.com/ip/stackoverflow.com.json
现在的问题是,当我发出XMLHttp请求以获取它显示的JSON值时 0x80004005 (NS_ERROR_FAILURE)
消息:[异常...“失败” nsresult:“ 0x80004005(NS_ERROR_FAILURE)”位置:.... ...... :: httpGet ::第30行“数据:否]
这是我的脚本代码
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
好的,我解决了问题。问题是,由于相同的原始策略,您无法向其他域发出XMLHttp请求,而驻留在其他域上。
因此,当contentScript向服务器发出XMLHttp请求时,浏览器将抛出NS_error_failure
。
我发现的解决方案是使用Addon SDK的Request API。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上。
感谢大家的帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句