博客最近帖子控制台错误:无法读取未定义的属性'title'



我找到了这个最近的Blogger脚本,它将显示某个标签或标签的最新帖子。脚本工作正常。但是,如果我多次使用此脚本,以显示不同标签的最新帖子,并抛出以下错误:

无法读取未定义的属性"标题"

查看脚本,我无法弄清楚是什么原因造成的,或者如何解决它。

<script style='text/javascript'>
    //<![CDATA[
    function labelthumbs(json) {
        document.write('<ul class="label_with_thumbs">');
        for (var i = 0; i < numposts; i++) {
            var entry = json.feed.entry[i];
            var posttitle = entry.title.$t;
            var posturl;
            if (i == json.feed.entry.length) break;
            for (var k = 0; k < entry.link.length; k++) {
                if (entry.link[k].rel == 'replies' && entry.link[k].type == 'text/html') {
                    var commenttext = entry.link[k].title;
                    var commenturl = entry.link[k].href;
                }
                if (entry.link[k].rel == 'alternate') {
                    posturl = entry.link[k].href;
                    break;
                }
            }
            var thumburl;
            try {
                thumburl = entry.media$thumbnail.url;
            } catch (error) {
                s = entry.content.$t;
                a = s.indexOf("<img");
                b = s.indexOf("src="", a);
                c = s.indexOf(""", b + 5);
                d = s.substr(b + 5, c - b - 5);
                if ((a != -1) && (b != -1) && (c != -1) && (d != "")) {
                    thumburl = d;
                } else thumburl = 'http://3.bp.blogspot.com/-O-vjxP03hYo/UXVtH90_iQI/AAAAAAAAAG4/60hz9Rn5FWA/s1600/No+Image+1.gif';
            }
            var postdate = entry.published.$t;
            var cdyear = postdate.substring(0, 4);
            var cdmonth = postdate.substring(5, 7);
            var cdday = postdate.substring(8, 10);
            var monthnames = new Array();
            monthnames[1] = "Jan";
            monthnames[2] = "Feb";
            monthnames[3] = "Mar";
            monthnames[4] = "Apr";
            monthnames[5] = "May";
            monthnames[6] = "June";
            monthnames[7] = "July";
            monthnames[8] = "Aug";
            monthnames[9] = "Sept";
            monthnames[10] = "Oct";
            monthnames[11] = "Nov";
            monthnames[12] = "Dec";
            document.write('<li class="clearfix">');
            if (showpostthumbnails == true) document.write('<a href="' + posturl + '" target ="_top"><img class="label_thumb" src="' + thumburl + '"/></a>');
            document.write('<strong><a href="' + posturl + '" target ="_top">' + posttitle + '</a></strong><br>');
            if ("content" in entry) {
                var postcontent = entry.content.$t;
            } else if ("summary" in entry) {
                var postcontent = entry.summary.$t;
            } else var postcontent = "";
            var re = /<S[^>]*>/g;
            postcontent = postcontent.replace(re, "");
            if (showpostsummary == true) {
                if (postcontent.length < numchars) {
                    document.write('');
                    document.write(postcontent);
                    document.write('');
                } else {
                    document.write('');
                    postcontent = postcontent.substring(0, numchars);
                    var quoteEnd = postcontent.lastIndexOf(" ");
                    postcontent = postcontent.substring(0, quoteEnd);
                    document.write(postcontent + '...');
                    document.write('');
                }
            }
            var towrite = '';
            var flag = 0;
            document.write('<br>');
            if (showpostdate == true) {
                towrite = towrite + monthnames[parseInt(cdmonth, 10)] + '-' + cdday + ' - ' + cdyear;
                flag = 1;
            }
            if (showcommentnum == true) {
                if (flag == 1) {
                    towrite = towrite + ' | ';
                }
                if (commenttext == '1 Comments') commenttext = '1 Comment';
                if (commenttext == '0 Comments') commenttext = 'No Comments';
                commenttext = '<a href="' + commenturl + '" target ="_top">' + commenttext + '</a>';
                towrite = towrite + commenttext;
                flag = 1;;
            }
            if (displaymore == true) {
                if (flag == 1) towrite = towrite + ' | ';
                towrite = towrite + '<a href="' + posturl + '" class="url" target ="_top">More »</a>';
                flag = 1;;
            }
            document.write(towrite);
            document.write('</li>');
            if (displayseparator == true) if (i != (numposts - 1)) document.write('');
        }
        document.write('</ul>');
    }
    //]]>
</script>
<script type='text/javascript'>
    var numposts = 3;
    var showpostthumbnails = true;
    var displaymore = false;
    var displayseparator = true;
    var showcommentnum = false;
    var showpostdate = false;
    var showpostsummary = true;
    var numchars = 100;
</script>
<script type="text/javascript" src="/feeds/posts/default/-/video?orderby=published&alt=json-in-script&callback=labelthumbs"></script>

有各种各样的这些脚本可用,有些相似,有些不相似。但是,似乎它们都抛出了此错误。错误可能是由源本身引起的,还是脚本引起的?

具体来说,控制台说错误出在这个变量上:

var posttitle = entry.title.$t;

错误是由numposts变量值大于特定标签中存在的帖子数引起的

例如,你的标签可能只包含一个帖子,但如果你提供numposts的值大于 1,那么在 for 循环的第二次迭代中,它将抛出上述错误,因为它们不会是任何要迭代的帖子

对于工作演示,请检查 http://jsbin.com/quniyifuna/1/,此处上述代码的两个实例工作正常,控制台中没有任何错误

在第二个演示中,http://jsbin.com/dosuhi/1/,我给numposts一个大于该特定标签中存在的帖子的值,因此在控制台中您会发现与您的错误相同的错误

我认为您没有更改标签名称,因为博主仅在特定标签下显示相关帖子 1 次。但是,您必须尝试更改 JS 上最后一行的博客标签:

<script type="text/javascript" src="/feeds/posts/default/-/video?orderby=published&alt=json-in-script&callback=labelthumbs"></script>

只需将视频标签更改为另一个,我敢肯定,它会起作用......

最新更新