Greasemonkey没有看到在Facebook上对DOM做出的更改

时间:2013-04-22 20:46:18

标签: greasemonkey

我正在使用我的GM脚本来链接多个页面。如果我创建一个只包含以下代码的脚本:(我正在使用jQuery btw)

$(".rfloat.uiButton").trigger('click');

它会像列表中的页数一样。但是底部有一个按钮,上面写着“查看更多结果”。这些是由Ajax加载的。所以,我更新了我的脚本来监听附加到DOM的元素,如下所示:

$("#pagelet_search_results_objects").bind("DOMSubtreeModified",HandleDOM_ChangeWithDelay);

var zGbl_DOM_ChangeTimer = null;

function HandleDOM_ChangeWithDelay (zEvent) {
    if (typeof zGbl_DOM_ChangeTimer == "number") {
        clearTimeout (zGbl_DOM_ChangeTimer);
        zGbl_DOM_ChangeTimer = '';
    }
    zGbl_DOM_ChangeTimer = setTimeout (HandleDOM_Change, 333);
}

function HandleDOM_Change () {
    alert("New content loaded"); // This fires once
    $("a.rfloat.uiButton").trigger('click');
}

单击“查看更多结果”后,警报将触发,新页面结果将添加到DOM中。但点击触发器不会触发。就像GM没有看到已经应用于DOM的变化一样。

为什么会这样?

修改

做的时候

alert($("a.rfloat.uiButton").length);

它显示更新后的号码,但仍然没有点击它们。

1 个答案:

答案 0 :(得分:0)

什么是错误控制台( Ctrl Shift J )说什么?

到目前为止,我没有看到任何匹配$("a.rfloat.uiButton")的Facebook页面。链接到一个。

FB很可能对添加的链接使用不同的事件处理,jQuery's .trigger() only operates on a small-subset of events.

尝试:

jQuery ('a.rfloat.uiButton').each ( function () {
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    this.dispatchEvent (clickEvent);
}

新链接甚至可能无法点击。请参阅"Choosing and activating the right controls on an AJAX-driven site"


多次运行$("a.rfloat.uiButton").trigger('click');会重新点击之前的链接。此可能会导致问题。