Reputation: 55
I made a greasemonkey script for a domain, Now how do I make it run only once? Like it starts every time the domain is accessed, I don't want that. How do I make it run only once and then like delete itself or make itself inactive?
Thanks.
Upvotes: 5
Views: 4013
Reputation: 93473
If you want a script (or part of a script) to run only once, then you need to store a flag in non-volatile storage. A script cannot delete itself or turn itself off. But it can exit right away rather than run any other code.
To store things on a site-by-site (domain) basis, use localStorage. To store things on a script+namespace basis, use GM_setValue. Here's a basic script:
// ==UserScript==
// @name _Run a GM script one-time only
// @namespace _pc
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
var alreadyRun = GM_getValue ("alreadyRun", false);
if ( ! alreadyRun) {
GM_setValue ("alreadyRun", true);
alert ("This part of the script will run exactly once per install.");
}
Upvotes: 6
Reputation: 24617
Redefine the function as the last statement in the body:
function foo()
{
...
foo = function(){};
}
Upvotes: 1