我正在使用RSS Feed为Windows 8创建博客阅读器应用程序。部分代码:
function downloadBlogFeed() {
WinJS.xhr({ url: "http://feeds.feedburner.com/CssTricks" }).then(function (rss) {
var items = rss.responseXML.querySelectorAll("item");
for (var n = 0; n < items.length; n++) {
var article = {};
article.title = items[n].querySelector("title").textContent;
var thumbs = items[n].querySelectorAll("thumbnail");
if (thumbs.length > 1) {
article.thumbnail = thumbs[1].attributes.getNamedItem("url").textContent;
article.content = items[n].textContent;
articlesList.push(article);
}
}
});
}
因此,我的应用无法从FeedBurner读取Feed。我收到此错误
无法加载http://feeds.feedburner.com/~d/styles/itemcontent.css。应用无法在本地环境中加载远程Web内容。
我已尝试http://feeds.feedburner.com/CssTricks?format=xml
和http://feeds.feedburner.com/CssTricks?fmt=xml
,但同样的错误。
编辑:完整代码:http://jsfiddle.net/8n67y/
答案 0 :(得分:2)
您遇到的错误不是因为您无法从Feedburner中读取。这是因为您尝试加载到DOM中的内容中的某个地方是对Web上的CSS文件的引用(itemcontent.css)。
当您在本地环境中操作时,无法从Web动态加载脚本或CSS,因为这会在本地环境中带来安全风险。
见这里:
http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx
在这里:
http://msdn.microsoft.com/en-us/library/windows/apps/hh465373.aspx
有关本地和Web上下文之间差异的更多信息,以及适用于每个上下文的限制。
对于您的特定情况,我认为您应该尝试进一步解析内容(您可以在上面的代码中设置断点来检查Feed返回的XML内容)以确定返回CSS文件引用的位置并以编程方式删除它,如果它在一致的位置,或者找到另一种消除CSS引用的方法,这似乎是导致异常的原因(基于上面的有限信息)。
答案 1 :(得分:0)
您尝试执行的操作可以使用以下代码完成,而不是WinJS.xhr使用xmlHTTPRequest。
以下代码是我使用我的RSS阅读器的代码的一部分,它在所有情况下都能很好地工作,我们可以下载图片,文本,链接......无论你在Feed中找到什么(http://feeds.feedburner.com/CssTricks
)得到缩略图,一切正常。
我也通过以下修改测试了它,
function connectToURL() {
var url = "";
xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
return;
}
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.open("GET", url,true);
xmlHttp.send(null);
}
// your job will actually start on this one...
function stateChanged() {
if(xmlHttp != null )
if (xmlHttp[item.key].readyState == 4 ) {
try {
var xmlDoc = xmlHttp.responseXML.documentElement.getElementsByTagName("TAGYOUWANTTOGET");
for (var i = 0; i < xmlDoc.length; i++) {
xmlDoc[i].getElementsByTagName("TAG")[0].childNodes[0].nodeValue
}
} catch (e) {
//work on the exception
}
}
}
}
function GetXmlHttpObject() {
var xmlHttp = null;
try {
xmlHttp = new XMLHttpRequest();
}
catch(e) {
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}