2

私は多くの同様の質問を見てきました、そして私はこれを自分で動かすために私が考えることができるすべてを試みました。

最初に関連するコード(ターゲットページからの¿):

document.getElementById('btn_submit').innerHTML =
 '<input type="hidden" value="17271" name="idofclick">
  <input type="submit" value=" Click Me Now! " name="submit_com" class="padding2">';

基本的に、ページにはタイマーがあり、「今すぐクリックしてください!」3秒後にボタンが表示されます。これがクリックしたい部分です。

これは私のコードです。動いていない:

// ==UserScript==
// @name        abc
// @namespace   something
// @description abc Scripty
// @include     *
// @version     1
// ==/UserScript==
(function ClicktheButton(obj) {
   var evt = document.createEvent("MouseEvents");
   evt.initMouseEvent("click", true, true, window,
   0, 0, 0, 0, 0, false, false, false, false, 0, null);
   var canceled = !obj.dispatchEvent(evt);
   /*

  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
  */
}

var StupidButton = document.querySelector.innerHTML('input[type="submit"][value=" Click Me Now! "]');
ClicktheButton(StupidButton);
4

1 に答える 1

4

そのコードにはエラーがあります。Firefoxのエラーコンソール(CtrlShiftJ)を使用してそれらを確認してください。jslintを使用してコードをチェックすることも役立ちます。

とにかく、これは一般的なGreasemonkeyの問題です。waitForKeyElements()ユーティリティを使用して、そのボタンの遅延表示を処理します。jQueryを使用してコードを単純化します(そしてコードをより堅牢で移植性のあるものにします)。

したがって、スクリプトは次のようになります。

// ==UserScript==
// @name     _YOUR_NAME
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/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.
*/

function clickSubmitBtnWhenItAppears (jNode) {
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    jNode[0].dispatchEvent (clickEvent);
}

//-- Value match is case-sensitive
waitForKeyElements (
    //"#btn_submit input[type='submit'][value*='Click Me Now']",
    "input[type='submit'][value*='Click Me Now']",
    clickSubmitBtnWhenItAppears
);
于 2012-12-16T12:59:49.457 に答える