2012-11-15 55 views
4

當前爲特定站點製作Windows 8 RSS閱讀器應用程序。由於網站使用<object></object>來嵌入視頻而不是,因此除了視頻[通常是YouTube],所有內容都可以正常工作。結果只是視頻應該存在的大空白對象塊。使用JavaScript修改Windows 8的XML RSS Feed

我的第一本能是找到並用代替<object></object>標籤,並將src屬性添加到正確的URL中。我創建了一個虛擬應用程序來測試此方法是否可行,並且解決方案能夠正常工作,如果您只是在更改靜態HTML。

虛擬應用代碼:

<body> 
<div style="text-align: center;"> 
    <object width="853" height="480" id="test"> 
     <param name="movie" value="http://www.youtube.com/v/2rDs7W3WRIk?version=3&amp;hl=en_US"></param> 
     <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param> 
     <embed src="http://www.youtube.com/v/2rDs7W3WRIk?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="853" height="480" allowscriptaccess="always" allowfullscreen="true"></embed> 
    </object></div> 

寫叫下面的函數,它確實工作。想做類似於XML文檔的東西:

function setHTML5video() { 
    var listOfSrcs = document.getElementsByTagName("embed"); 
    for (var i = 0; i < listOfSrcs.length; i += 1) { 
     var videoSrc = document.getElementsByTagName("embed")[i].getAttribute("src"); 
     var newSrc = videoSrc.replace("/v/", "/embed/");    
     //var newNode = '<iframe width="853" height="480" src="' + newSrc + '" frameborder="0" allowfullscreen></iframe>'; 
     var iFrame = document.createElement("iframe"); 
     iFrame.setAttribute("src", newSrc); 
     document.getElementsByTagName("object")[i].replaceNode(iFrame); 
     //WinJS.Utilities.setOuterHTMLUnsafe(test, newNode); 
    } 
} 

虛擬應用代碼的結尾。

但是,由於缺乏對Windows 8 API的瞭解,儘管在線搜索了整天的答案,但我無法找到如何對從外部站點下載的XML Feed執行相同操作。我可能錯過了一些基本的東西。

function itemInvoked(z) { 
     var currentArticle = articlesList.getAt(z.detail.itemIndex);      
     WinJS.Utilities.setInnerHTMLUnsafe(articlecontent, currentArticle.content); 
     articlelist.style.display = "none"; 
     articlecontent.style.display = ""; 
     mainTitle.innerHTML = currentArticle.title;    
     WinJS.UI.Animation.enterPage(articlecontent);   
    } 

當用戶點擊的縮略圖,對於對應的文章中的XML RSS饋送被拉起並注入用id =「articlecontent」。我想在注入之前修改該Feed。

<section id="content"> 
    <div id="articlelist" data-win-control="WinJS.UI.ListView" 
     data-win-options="{ itemDataSource: mmoNewsPosts.ItemList.dataSource, itemTemplate: MMOItemTemplate }"></div> 
     <!-- Article Content -->  
    <div id="articlecontent"></div>   
     <!-- Article Content -->   
</section> 

編輯,因爲那裏似乎是混亂,我已經進通過WinJS.xhr裝入:

function downloadMMOFeed(FeedUrl) { 
    WinJS.xhr({ url: FeedUrl, responseType: "xml" }).then(function (rss) { 
     pageTitle = rss.responseXML.querySelector("title").textContent; 
     mainTitle.innerHTML = pageTitle; 
     var items = rss.responseXML.querySelectorAll("item"); 
//more stuff... 
for (var n = 0; n < items.length; n +=1) { 
article.content = items[n].querySelector("description").textContent; 
//more stuff... 
+0

想我找到了解決方案;明天我會有時間發佈更新。 – Arctic

回答

0

你能不能只加載XML通過XHR飼料中,然後解析綁定到頁面之前的結果?例如:

WinJS.xhr({ 
    url: "http://www.w3schools.com/xml/note.xml", responseType: "xml" 
}) 
    .done(
     function (request) { 
      var text = request.responseText; 
      //TODO : Parse the XML returned by the server which is in var text 

     }); 

在Windows 8中沒有跨域限制,所以像這樣的東西是完全可能的。

+0

在使用WinJS.xhr的主JS文件的其他地方已經有一個非常類似的函數。 – Arctic