我通过使用RSS提要创建博客阅读器应用程序的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的阅读饲料。 我得到这个错误
无法加载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/
你遇到的错误是不是因为你不能从Feedburner的读取。 这是因为在某处,你正在试图加载到DOM的内容是网络(itemcontent.css)在CSS文件的引用。
当你在当地的环境中工作,则不能动态地从网页加载脚本或CSS,因为在当地的环境带来安全隐患。
看这里:
http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx
和这里:
http://msdn.microsoft.com/en-us/library/windows/apps/hh465373.aspx
有关限制适用于每个地方和Web上下文之间的差异,以及更多的信息。
为了您的具体情况,我想你应该尝试什么进一步的解析内容(你可以在上面的代码中设置断点检查XML内容由进料返回),确定返回的CSS文件引用是在哪里,然后删除它编程,如果它在一个一致的地方,或者找到消除CSS参考,这似乎是什么引起的异常(基于上面的信息有限)的另一种手段。
你所要做的可以用下面的代码来完成,而不是WinJS.xhr使用XMLHttpRequest。
下面的代码是我用我的UM RSS阅读器代码的一部分,它工作得很好,在所有情况下,我们可以donwload图片,文字,链接..任何你可以在饲料中找到( 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;
}