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=xmlとを試しましhttp://feeds.feedburner.com/CssTricks?fmt=xmlたが、同じエラーです。

編集:完全なコード: http://jsfiddle.net/8n67y/

4

2 に答える 2

2

発生しているエラーは、Feedburner から読み取ることができないためではありません。これは、DOM にロードしようとしているコンテンツのどこかが Web 上の CSS ファイル (itemcontent.css) への参照であるためです。

ローカル コンテキストで操作している場合、スクリプトや CSS を Web から動的に読み込むことはできません。これは、ローカル コンテキストでセキュリティ リスクが生じるためです。

ここを参照してください:

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 に答える