1

だから私は、さまざまなページを実行してナビゲートするグリースモンキー拡張機能のトグルボタンを作成する方法を見つけようとしています。

だからこれは私がこれまで持っているものです

var keepgoing = true

ここで if 文などの始まり

else if keepgoing == true
  { newsearch(); }

ボタンクリック:

 if keepgoing == true { keepgoing = false }
 else if keepgoing == false { keepgoing = true }

基本的に、Webページにボタンを配置するのに助けが必要です。また、ページをナビゲートするときに var を記憶する必要があります。

ありがとう、レイ

4

1 に答える 1

0

永続的なボタン (または任意のデータ) が必要な場合は、何らかのストレージを使用する必要があります。複数のドメインが関係している場合は、GM_setValue()を使用します。すべてが同じドメインにある場合は、localStorageを使用します。

私はこの種の永続的なボタンを自分で追加します。これは、私が使用するものを示す簡略化されたスクリプトです。ボタンを追加するだけでなく、ボタン UI をもう少しユーザーフレンドリーにします。

ノート:

  1. ボタンの状態は、ページの読み込み間およびサイト間で持続します。
  2. ボタンは左上 (CSS で設定) に留まり、マウスオーバーしないとほぼ不透明になります。
  3. ページに追加するコントロールが複数ある場合があるため、オブジェクトを使用します。
  4. ボタンがどのように表示され、どのように動作するかのデモを jsFiddle で見ることができます。(ただし、デモではページの読み込みを超えて値を保持することはできません。GM スクリプトでは保持されます。)


// ==UserScript==
// @name     _Keep going button
// @include  http://YOUR_SERVER_1.COM/YOUR_PATH/*
// @include  http://YOUR_SERVER_2.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// ==/UserScript==

//--- Add the button.
$("body").append (
      '<div class="gmPersistentButton">'
    + '<button id="gmContinueBtn">Init failed!</button></div>'
);

//--- Define and init the matching control object:
var btnControl  = new PersistentButton (
    "gmContinueBtn",        //-- HTML id
    "StopContinueBtn",      //-- Storage label
    ["Stop", "Continue"],   //-- Text that the button cycles through
    [false, true]           //-- Matching values for the button's states
);

//--- Activate the button click-handler.
$("#gmContinueBtn").click ( function () {
    var btnValue    = this.value;
    keepgoing       = btnValue
    btnControl.SetNextValue ();

    if (keepgoing == "true") {
        // CALL YOUR FUNCTION HERE.
    }
} );

//--- The button will fade when we aren't using it.
var zDisplayPanel   = $('div.gmPersistentButton');
zDisplayPanel.hover (
    function () { $(this).stop (true, false).fadeTo (50,  1  ); },
    function () { $(this).stop (true, false).fadeTo (900, 0.1); }
);
zDisplayPanel.fadeTo (2900, 0.1);


//--- CSS styles to make it work and to improve appearance.
GM_addStyle ( (<><![CDATA[
    .gmPersistentButton {
        background:         orange;
        color:              black;
        position:           fixed;
        top:                1em;
        right:              1em;
        z-index:            6666;
        padding:            1em;
        border:             3px double gray;
        border-radius:      1ex;
        opacity:            0.8;
    }
    .gmPersistentButton button {
        cursor:             pointer;
    }
    .gmPersistentButton button:hover {
        color:              red;
    }
]]></>).toString () );


//--- Button object
function PersistentButton (htmlID, setValName, textArry, valueArry) {
    //--- Initialize the button to last stored value or default.
    var buttonValue     = valueArry[0];
    fetchValue ();
    storeValue ();      //-- Store, in case it wasn't already.
    setButtonTextAndVal ();

    //--- DONE with init.  Set click and keyboard listeners externally.

    //***** Public functions:
    this.Reset          = function () {
        buttonValue     = valueArry[0];
        storeValue ();    
        setButtonTextAndVal ();
    };

    this.SetNextValue   = function () {
        var numValues   = valueArry.length;
        var valIndex    = 0;

        for (var J = numValues - 1;  J >= 0;  --J) {
            if (buttonValue == valueArry[J]) {
                valIndex    = J;
                break;
            }
        }
        valIndex++;
        if (valIndex >= numValues)
            valIndex    = 0;

        buttonValue     = valueArry[valIndex];

        storeValue ();    
        setButtonTextAndVal ();
    };


    //***** Private functions:
    function fetchValue () {
        buttonValue     = GM_getValue (setValName, buttonValue);
    }

    function storeValue () {
        GM_setValue (setValName, buttonValue);
    }

    function setButtonTextAndVal () {
        var buttonText  = "*ERROR!*";

        for (var J = valueArry.length - 1;  J >= 0;  --J) {
            if (buttonValue == valueArry[J]) {
                buttonText  = textArry[J];
                break;
            }
        }

        var theBtn      = document.getElementById (htmlID);
        if (theBtn) {
            theBtn.textContent  = buttonText;
            theBtn.setAttribute ("value", buttonValue);
        }
        else
            alert ('Missing persistent button with ID: ' + htmlID + '!');
    }
}
于 2012-06-19T23:18:45.907 に答える