3

ページ上のボタンは次のとおりです。

<a id="dispatchOnJobButton" class="ui-btn ui-btn-corner-all ui-shadow ui-btn-up-c" href="#" data-role="button" data-theme="c" data-disabled="false">
<span class="ui-btn-inner ui-btn-corner-all" aria-hidden="true">
<span class="ui-btn-text">Dispatch on next job</span>
</span>
</a>


クリックするには Greasemonkey が必要です。私はさまざまな方法を試しましたが、実行するはずの機能を起動する方法はありません。

var clickEvent = document.createEvent("MouseEvents");
clickEvent.initEvent("click", true, true);
document.getElementById('dispatchOnJobButton').dispatchEvent(clickEvent);

// also tried
document.getElementById('dispatchOnJobButton').click();
// and this
unsafeWindow.document.getElementById('dispatchOnJobButton').click();

私が試すことができる何か他のアイデアはありますか?

4

1 に答える 1

10

すべてのボタンがクリック イベントで機能するわけではありません。また、これが静的に読み込まれたボタンなのか、AJAX によって読み込まれたのかは明確ではありません。(対象ページへリンク!)

一般的なアプローチは、AJAX 駆動型サイトで適切なコントロールを選択してアクティブ化する に記載されています。

この完全なスクリプトのようなものは、99% のケースで機能します:

// ==UserScript==
// @name     _YOUR_SCRIPT_NAME
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

waitForKeyElements ("#dispatchOnJobButton", triggerMostButtons);

function triggerMostButtons (jNode) {
    triggerMouseEvent (jNode[0], "mouseover");
    triggerMouseEvent (jNode[0], "mousedown");
    triggerMouseEvent (jNode[0], "mouseup");
    triggerMouseEvent (jNode[0], "click");
}

function triggerMouseEvent (node, eventType) {
    var clickEvent = document.createEvent('MouseEvents');
    clickEvent.initEvent (eventType, true, true);
    node.dispatchEvent (clickEvent);
}


うまくいかない場合は、目的のページにリンクするか、SSCCE を投稿してください。

于 2013-03-19T22:48:35.980 に答える