簡體   English   中英

如何為Greasemonkey腳本創建切換按鈕?

[英]How can I create a toggle button for Greasemonkey scripts?

因此,我試圖弄清楚如何為運行和導航到各個頁面的潤滑脂猴子擴展制作一個切換按鈕。

所以這就是我到目前為止

var keepgoing = true

if語句和此處內容的初學者

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

點擊按鈕:

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

因此,基本上我需要在網頁上放置按鈕的幫助。 並且它需要在瀏覽頁面時記住var。

謝謝,雷

如果您想要一個持久的按鈕(或任何數據),則需要使用某種存儲方式。 如果涉及多個域,請使用GM_setValue() 如果所有內容都在同一域中,請使用localStorage

我自己添加了這種持久按鈕,這是一個精簡的腳本,顯示了我的用法。 它不僅添加按鈕,還使按鈕UI更加用戶友好,IMO。

注意:

  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 + '!');
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM