我写了一个firefox附加组件来拉取并显示一个rss feed。这是我的原始代码。
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
var html = "";
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
html = "<h5>" + "<a href='" + entry.link + "'>" + entry.title + "</a></h5>";
var div = document.createElement("div");
div.innerHTML = html;
container.appendChild(div);
}
document.write(html);
}
});
它工作正常,当我上传到firefox网站时,验证发出2次警告。
innerHTML
。警告:由于安全性和性能原因,不应使用动态值设置innerHTML。这可能导致安全问题或相当严重的性能下降。
var div = document.createElement("div");
div.innerHTML = html;
container.appendChild(div);
document.write
。警告:document.write
在许多情况下会在扩展中使用时失败,并且在使用不当时可能会产生严重的安全后果。因此,不应该使用它。有关详细信息,请参阅https://developer.mozilla.org/docs/XUL/School_tutorial/DOM_Building_and_HTML_Insertion。
}
document.write(html);
}
所以重写了代码,它不再显示任何东西了。知道我做错了吗?
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
var html = "";
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
html = "<h5>" + "<a href='" + entry.link + "'>" + entry.title + "</a></h5>";
eUL = document.createElement("h5");
eAnchor = document.createElement("a");
eAnchor.setAttribute("href",entry.link);
eAnchor.appendChild(document.createTextNode(entry.title));
eUL.appendChild(eAnchor);
document.getElementById("container").appendChild(eUL);
}
var bd = document.getElementsByTagName('body')[0];
bd.appendChild(html);
}
});
答案 0 :(得分:1)
在您的原始代码和修改过的代码中,看起来您要将元素添加两次 - 一次添加到容器,一次添加到正文。您可能只想将其添加到容器中,在这种情况下,修改后的代码应如下所示:
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
eUL = document.createElement("h5");
eAnchor = document.createElement("a");
eAnchor.setAttribute("href",entry.link);
eAnchor.appendChild(document.createTextNode(entry.title));
eUL.appendChild(eAnchor);
container.appendChild(eUL);
}
}
});
在不知道您的Feed或包含文档的结构的情况下,它无法确定这是否有效,但它是朝着正确方向迈出的一步。如果仍有问题,请检查错误控制台。