我正在开发Chrome扩展程序并尝试使用Google Feed API在扩展程序中添加带有图片的网站RSS Feed。 但它的投掷错误
Uncaught TypeError: Cannot read property '0' of undefined
这是脚本
function myGetElementsByClassName(selector) {
if ( document.getElementsByClassName ) {
return document.getElementsByClassName(selector);
}
var returnList = new Array();
var nodes = document.getElementsByTagName('div');
var max = nodes.length;
for ( var i = 0; i < max; i++ ) {
if ( nodes[i].className == selector ) {
returnList[returnList.length] = nodes[i];
}
}
return returnList;
}
var rssReader = {
containers : null,
// initialization function
init : function(selector) {
containers = myGetElementsByClassName(selector);
for(i=0;i<containers.length;i++){
// getting necessary variables
var rssUrl = containers[i].getAttribute('rss_url');
var num = containers[i].getAttribute('rss_num');
var id = containers[i].getAttribute('id');
// creating temp scripts which will help us to transform XML (RSS) to JSON
var url = encodeURIComponent(rssUrl);
var googUrl = 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num='+num+'&q='+url+'&callback=rssReader.parse&context='+id;
var script = document.createElement('script');
script.setAttribute('type','text/javascript');
script.setAttribute('charset','utf-8');
script.setAttribute('src',googUrl);
containers[i].appendChild(script);
}
},
// parsing of results by google
parse : function(context, data) {
var container = document.getElementById(context);
container.innerHTML = '';
// creating list of elements
var mainList = document.createElement('ul');
// also creating its childs (subitems)
var entries = data.feed.entries;
for (var i=0; i<entries.length; i++) {
var img = new Image();
img.src = entries[i].mediaGroups[0].contents[0].url;
listItem.appendChild(img);
var listItem = document.createElement('li');
var title = entries[i].title;
var contentSnippet = entries[i].contentSnippet;
var contentSnippetText = document.createTextNode(contentSnippet);
var link = document.createElement('a');
link.setAttribute('href', entries[i].link);
link.setAttribute('target','_blank');
var text = document.createTextNode(title);
link.appendChild(text);
// add link to list item
listItem.appendChild(link);
var desc = document.createElement('p');
desc.appendChild(contentSnippetText);
// add description to list item
// listItem.appendChild(desc);
// adding list item to main list
mainList.appendChild(listItem);
}
container.appendChild(mainList);
}
};
window.onload = function() {
rssReader.init('post_results');
}
&#13;
<div class="post_results" id="post_results1" rss_num="4" rss_url="http://www.pixlov.com/feed">
<div class="loading_rss">
<img alt="Loading..." src="https://www.script-tutorials.com/demos/82/images/loading.gif" />
</div>
</div>
&#13;
问题在于此行
img.src = entries[i].mediaGroups[0].contents[0].url;
但奇怪的是,当我添加此网站的Feed链接 http://mightydeals.com/feed 时,它就可以了!。
答案 0 :(得分:0)
问题出在Feed网址中。 feed url数据的响应不包含mediaGroups属性。因此,当您尝试从中获取索引0值时,它会抛出0索引错误。 要首先解决此问题,您需要检查包含mediaGroups密钥的响应数据。 喜欢 if(entries [i] .mediaGroups&amp;&amp; entries [i] .mediaGroups.length&gt; 0)