1

我正在使用 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=xmland http://feeds.feedburner.com/CssTricks?fmt=xml,但同样的错误。

编辑:完整代码:http: //jsfiddle.net/8n67y/

4

2 回答 2

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 环境之间的差异以及适用于每种环境的限制的更多信息。

对于您的特定情况,我认为您应该尝试进一步解析内容(您可以在上面的代码中设置断点以检查提要返回的 XML 内容)以确定返回 CSS 文件引用的位置并删除它以编程方式,如果它位于一致的位置,或者找到另一种消除 CSS 引用的方法,这似乎是导致异常的原因(基于上面的有限信息)。

于 2012-10-12T14:33:42.920 回答
0

您可以使用以下代码来完成您想要做的事情,而不是 WinJS.xhr 使用 xmlHTTPRequest。

下面的代码是我使用 RSS 阅读器的代码的一部分,它在所有情况下都运行良好,我们可以下载图片、文本、链接.. 无论你在提要 ( 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;
}
于 2012-11-12T02:32:17.393 回答