使用jQuery / Apache Cordova检索rss feed

时间:2016-08-25 13:41:58

标签: jquery cordova rss

我正在尝试获取RSS源并通过apache cordova在移动设备上显示内容。但是,如果我不提供指向.xml文件的URL,则读取器不会加载。例如,

var feedUrl = "https://newsline.com/feed/";

这不会加载,但如果我使用

var feedUrl = "http://feeds.bbci.co.uk/news/technology/rss.xml";

它有效。这是我正在使用的rss reader javascript文件:

 /**
 * Fetch RSS and display the contents of it
 */
Feed.prototype.load = function() {
    var self = this;

    $(this.maskEl).show();
    $(this.errorEl).text('');

    $.ajax({
        url: this.url,
        dataType: 'text',
        crossDomain: true,
        success: function(data) {
            data = $.parseXML(data.trim());

            $(self.listEl).empty();

            // Display RSS contents
            var $rss = $(data);
            $rss.find('item').each(function() {
                var item = this;
                $(self.listEl).append(self.createListElement(item));
            });
        },
        error: function() {
            $(self.errorEl).text('Failed to load RSS.');
        },
        complete: function() {
            $(self.maskEl).hide();
        }
    });
};

并在index.html页面上:

var feedUrl = "https://newsline.com/feed/";

    $(function() {

        var feed = new Feed({
            url: feedUrl
        });

        if (monaca.isIOS) {
            $('.toolbar').css('margin-top', '20px');
            $('.button').css('top', '20px');
        }

        $('.button').click(function() {
          console.log('Reload.');
          feed.load();
        });

        feed.load();

    });

任何帮助将不胜感激。我在想它与feed-reader.js中xml的实际解析有关,但我并不完全确定。

谢谢!

更新

我得到了网址按预期工作,但是当我点击Feed上的文章(它不会重新加载RSS Feed)后我尝试返回主页时遇到问题。代码是一样的。  例如,以下是一些截图: Image Screenshots

基本上,Feed会在主页上加载,但是如果单击一个链接并且用户转到该页面然后单击后退箭头(如屏幕截图所示),则会出现错误消息“无法加载RSS”。这是一个jQuery问题,页面没有再次抓取结果?我已将它设置为在DOM准备就绪后执行,因此如果用户返回主页,我将无法再次加载Feed。

再次,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

听起来像是一个缓存问题。如果是这样,PhoneGap disable caching可能会对您有所帮助。您需要一个plugin,您可以将其安装为

phonegap local plugin add https://github.com/moderna/cordova-plugin-cache.git

并使用

document.addEventListener('deviceready', onDeviceReady);
function onDeviceReady()
{
        var success = function(status) {
            alert('Message: ' + status);
        }

        var error = function(status) {
            alert('Error: ' + status);
        }

        window.cache.clear( success, error );
}