我正在尝试为站点 Lift.do 编写一个简短的 Greasemonkey 脚本,该脚本将单击我所有连接的“Prop”按钮。这些功能类似于 Facebook 上的“喜欢”按钮 - 您可以打开和关闭它们。
问题是,在重新加载页面时,脚本将停用之前激活的按钮。那么如何修改脚本以仅针对非活动的“道具”按钮?
我在此页面上使用 Brock Adams 的教程作为指南 -在 AJAX 驱动的站点上选择和激活正确的控件- 事实上,下面的大多数内容都是从 StackExchange 问题的答案中获得的信息的直接复制/粘贴。
// ==UserScript==
// @name Lift Propper
// @namespace https://lift.do/app/activity
// @description Props friends' lifts automatically
// @include https://lift.do/app/activity
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @version 1
// @grant none
// ==/UserScript==
waitForKeyElements ("a.action-button", triggerMostButtons);
function triggerMostButtons (jNode) {
triggerMouseEvent (jNode[0], "mouseover");
triggerMouseEvent (jNode[0], "mousedown");
triggerMouseEvent (jNode[0], "click"); //only needs click event, I think
triggerMouseEvent (jNode[0], "mouseup");
}
function triggerMouseEvent (node, eventType) {
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent (eventType, true, true);
node.dispatchEvent (clickEvent);
}
我复制了 URL 的源并将其放在这里: http: //pastebin.com/mfF8tbdC,尽管我不知道这有多大帮助,因为活动提要的内容看起来像是通过 AJAX 进入的。
我正在尝试使用的 URL 是https://lift.do/app/activity,但这当然与我的特定帐户相关联。
这是我所针对的节点的 html(来自 firebug):
<a class="action-button prop-button" ng-class="{active: item.propId}" ng-click="prop(item.id, item.propId)" ng-show="item.proppable"></a>
这是处于活动状态的同一个按钮:
<a class="action-button prop-button active" ng-class="{active: item.propId}" ng-click="prop(item.id, item.propId)" ng-show="item.proppable"></a>
这两个具有相同的 CSS 路径。那么我如何使用 waitForKeyElements 来区分这两者呢?如何仅针对非活动道具按钮?