目前正在为特定站点制作 Windows 8 RSS 阅读器应用程序。由于该网站使用 <object></object>
,所以除了视频 [通常是 YouTube] 之外一切正常。嵌入视频而不是 <iframe>
.结果只是一个大的空白对象 block ,视频应该在哪里。
我的第一直觉是找到并替换 <object></object>
带有 <iframe>
的标签并添加具有正确 URL 的 src 属性。我创建了一个虚拟应用程序来测试此方法是否有效,如果您要更改的只是静态 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&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&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 提要执行相同的操作。我可能遗漏了一些基本的东西。
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 提要将被提取并注入(inject)到 id = "articlecontent"中。我想在注入(inject)之前修改该提要。
<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...
最佳答案
您不能只通过 XHR 加载 XML 提要,然后在将结果绑定(bind)到页面之前解析结果吗?例如:
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 中没有跨域限制,所以这样的事情是完全可能的。
关于javascript - 使用 JavaScript 修改 Windows 8 的 XML RSS Feed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13392551/