检测何时使用jQuery加载新推文?

时间:2014-12-29 17:48:11

标签: jquery ajax twitter greasemonkey userscripts

您知道如何滚动到个人资料页面的底部(我说的是用户的个人页面,而不是时间轴),会自动加载新的推文。我正在编写一个UserScript,我想在每次加载这些新推文时执行一个函数。

但我无法找到一种方法来检测这个新的推文加载事件。我假设它是一个AJAX请求,对吗?所以我尝试了以下两个功能,但无济于事。

$(document).ajaxComplete(function() {
    alert("Complete! New tweets loaded!");
});

$(document).ajaxSuccess(function() {
  alert("Success! New tweets loaded!");
});

这是我到目前为止所拥有的。这在首先加载页面时有效。但它不会影响向下滚动后加载的推文。

// ==UserScript==

// @name            CoolScript
// @include         https://twitter.com/IJNanayakkara
// @include         https://twitter.com/IJNanayakkara/status/*
// @require         http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @require         https://gist.github.com/raw/2625891/waitForKeyElements.js
// @version         1.0
// @license         GPL v3 or any later version (http://www.gnu.org/copyleft/gpl.html)
// @grant           GM_addStyle

// ==/UserScript==

$.each($('p.js-tweet-text'), function() {
    $(this).prepend("Brought to you by ");
});

如何检测从jQuery加载新推文?


修改 我注意到另一个问题。导航到页面时,脚本不会运行。我实际上必须刷新页面。我搜索并找到了this answer。我将.js文件导入脚本,但我不知道我应该等待哪个元素。

如何在不手动刷新的情况下运行脚本?

1 个答案:

答案 0 :(得分:3)

如果,你的代码是这样的:

$.each($('p.js-tweet-text'), function() {
    $(this).prepend("Brought to you by ");
});

对页面的静态位或命令控制台起作用,然后转换为此waitForKeyElements代码:

waitForKeyElements ("p.js-tweet-text", prependToTweet);

function prependToTweet (jNode) {
    jNode.prepend("Brought to you by ");
}

简单:选择器保持不变,直接.each()代码端口,$(this)替换为jNode


waitForKeyElements自动处理AJAXed元素(适用于向下滚动而无需刷新)。