すべての接続の [Prop] ボタンをクリックするサイト Lift.do 用の短い Greasemonkey スクリプトをまとめようとしています。これらは Facebook の「いいね」ボタンのように機能し、オンとオフを切り替えることができます。
問題は、ページをリロードするときに、スクリプトが以前にアクティブ化したボタンを非アクティブ化することです。では、非アクティブな「Prop」ボタンのみを対象とするようにスクリプトを変更するにはどうすればよいでしょうか?
このページの 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>
これら 2 つの CSS パスは同じです。では、waitForKeyElements を使用して 2 つを区別するにはどうすればよいでしょうか。非アクティブな小道具ボタンのみをターゲットにする方法は?