javascript - Hur konverterar man ett bokmärke till ett Greasemonkey-användarskript?


Finns det ett enkelt sätt att göra detta? Och är det något som behöver ändras på grund av skillnader i hur det körs?

Svar #1

Det enklaste sättet att göra detta:

  1. Kör bokmärkeslets koden genom en URL-avkodare, så att javascript:alert%20('Hi%20Boss!')%3B, till exempel, blir:
    javascript:alert ('Hi Boss!');

  2. Ta bort det ledande javascript:. Resultat: alert ('Hi Boss!');

  3. Lägg till den här koden i slutet av din Greasemonkey-fil. Till exempel, skapa en fil med namnet,
    Hello World.user.js, med denna kod:

    // ==UserScript==
    // @name            Hello World!
    // @description     My first GM script from a bookmarklet
    // @include         https://stackoverflow.com/questions/*
    // @grant           none
    // ==/UserScript==
    
    alert ('Hi Boss!');
    
  4. Öppna Hello World.user.js med Firefox (CtrlO). Greasemonkey kommer att fråga om du vill installera skriptet.

  5. Nu kommer bokmärkeslets-koden att köras automatiskt på de sidor du specificerade med @include och @exclude-direktiven.

  6. Uppdatering: För att säkerställa maximal kompatibilitet, använd @grant none-direktivet som lades till i senare versioner av Greasemonkey och Tampermonkey.

VIKTIGT :

  • Användarskriptet kommer att köras mycket tidigare än du någonsin skulle kunna aktivera ett bokmärke. Normalt är detta inget problem.

  • Men i vissa fall kan du behöva vänta på att en del av sidan ska laddas helt.
    I så fall kan du använda tekniker/verktyg som waitForKeyElements.

  • Se även, Välja och aktivera rätt kontroller på en AJAX-driven webbplats.

  • Om du fortfarande inte kan få ditt nya skript att fungera, se till att läsa Min väldigt enkla Greasemonkey-skript körs inte?. Följ stegen och inkludera den angivna informationen i alla frågor du öppnar om problem med det nya skriptet.

Svar #2

Här är en mycket bra artikel för att undvika vanliga fallgropar på grund av skillnader mellan 'normal' JS och Greasemonkey.

De viktigaste sakerna i början:

  • Använd inte funktioner som strängar, som: window.setTimeout("my_func()", 1000); utan snarare window.setTimeout(my_func, 1000); eller window.setTimeout(function(){doSomething(); doSomethingOther();}, 1000);

  • Ställ inte in element.onclick utan hellre element.addEventListener("click", my_func, true);

  • Viss kod som normalt returnerar olika DOM-objekt returnerar i Greasemonkey-miljö dessa objekt inneslutna i XPCNativeWrapper. Detta är av säkerhetsskäl.

    Vissa metoder och egenskaper är "transparenta" och du kan anropa dem på det inlindade objektet, men vissa inte. Läs i den nämnda artikeln om hur du kringgår detta; du kan även använda (detta rekommenderas generellt inte, men för testning etc.) egenskapen wrappedJSObject. Det är, när obj.something/obj.something() inte fungerar i Greasemonkey, försök obj.wrappedJSObject.something/obj.wrappedJSObject.something().