jscher2000 Moderator


Thank you for your suggestion. I cannot test https://cn.bing.com/ because Microsoft shows me results on https://www.bing.com/ instead.

In case I do not have time to work on this script for a couple of weeks, can you add https://cn.bing.com/ in the "User includes" box? If you use Tampermonkey, open the Dashboard, then this script, then the Settings tab. You should find it there and be able to test how it works.


Sorry about that. Google started using flex layout on some results. Should be fixed in today's v2.2.2 update.


What I'm trying to do is fully unhide all hidden hits temporarily.

Similar to what appears when you click the grayed title, except auto-click them all in one step, and then auto-close them all in one step?

Also, how difficult do you suppose it would be to make this script work on Google Shopping and DuckDuckGo Shopping?

Shopping links run through each site's advertising engine, so the URLs are heavily coded. It might be possible to decode them, but I suspect it would be necessary to block on the store name, which is a possible alternate way for this extension to block results that I haven't built out.


Hi, I don't think it would be difficult to add support for Brave search.

Swisscows is giving me strange results. When I load the next page of results, it looks like the same results in a slightly scrambled order. ?? But the structure of the results looks reasonable for adding to the script.

As for timing.......


Hi e-t-l, sorry to have missed your question. Here are two options:

(1) If the site is on the regular block list, not the Perma-ban list, open the Manage Hiding dialog to the "Home" tab and re-check the box to "Show hidden hit notices". You can turn them off when you're done.

(2) If YouTube is on the Perma-ban list, temporarily disable the script using the monkey button on the toolbar. Each one is a bit different, but for example, on the Tampermonkey and Violentmonkey drop-downs, there is a little on/off switch for each script which could run on the current page. After turning the script on or off, reload the page to see the change.


Hi swelljoe, sorry for the delay in responding.

Google image results have a Content Security Policy that blocks the script from being inserted by Violentmonkey in Firefox. It should work in Tampermonkey, Greasemonkey, or FireMonkey. I haven't had time to dig into how to modify the script to make it work in Violentmonkey.

For DuckDuckGo, I'll need to study the page layout to add support for image results.


Re: @freeos:

You should only call GM_config.open() when the user wants to open it or you need the user to decide something.

I think a better alternative solution would be if the options could be accessed through the Violentmonkey extenesion popup.

You can add one or more menu commands to appear below the name of your script for users to call up the settings dialog, but the dialog would need to launch from the script in the web page, for example, in an overlay or popup window.

The code to allow real-time settings changes to take effect immediately can be laborious to write. As an example -- by someone without a programming background, so surely it's not very efficient -- you could look at:

https://www.jeffersonscher.com/gm/google-hit-hider/


Firefox: I added user includes in Violentmonkey for the three sites:

Chrome: I added a user include in Tampermonkey for the first site:

  • https://search.snopyta.org/ => the script runs, but inline style rules -- like display:none to hide the dialogs -- are blocked by CSP. What a mess.

It's not a quick rewrite to work around this, but I'll think about it for a future update.


The new FireMonkey extension cannot load this script without modifications.

First issue: this script tries to match all possible Google sites with URL patterns like:

// @include http*://www.google.*/*
// @include http*://www.google.co*.*/*

FireMonkey can only use URL patterns that are legal for extensions, meaning I can't have the * in the last part of the host name (protocol://hostname/path). Since Firefox rejects the pattern, the script cannot run.

If you manually edit the @include lines to match the sites you use, so there are no * left in the host name part of the address, then the script should load.

Second issue: FireMonkey is more like Greasemonkey than like Tampermonkey and Violentmonkey in how you store and retrieve block list data. The script sets GM4 = true only for Greasemonkey, but it needs to be set to true for FireMonkey, too.

I don't have an idea at this point how to manage these differences, but if anyone is interested in using FireMonkey, let me know so I can give it a higher priority. Thanks.


You mischaracterized what I wrote. However, we're not going to change one another's minds, so you do your thing and I'll do mine.


I disagree with this conclusion:

  1. Switching away from GPL is a violation of the license even if you are the original Copyright holder, i.e. license is irrevocable, because you are a licensor and the terms apply to an original Author as well under contract law.

The GPL grants rights to and imposes obligations on "You", the licensee. There are no obligations or limitations imposed by the license on "I" or "Me" or "We" or "Us" or "licensor" or "copyright holder" related to use or distribution of the work.


A userscript author has a lot of flexibility in relation to their own original code, the code for which they are the copyright owner. They can choose the license for each release, and change the license for any subsequent release. (From the licenses allowed on this site, of course.)

If a userscript author incorporated someone else's code into their script, their use of that third party code in their script is subject to the license terms for that code. If the author created a work based on (or incorporated) MIT-licensed code, there aren't many limitations in what license the author chooses for their userscript. On the other hand, if the author created a work based on (or incorporated) GPL-licensed code, then they cannot license their usercript under any license other than the same or newer GPL (or AGPL) license.

Once you add GPL licensing to Code it can't be removed ever period. e.g. it's "sticky" and must remain free software forever with all the conditions that GPL requires.

The GPL-licensed release continues to be under the GPL license, but the author (copyright owner) can re-license on on other terms. Why? Because the author (copyright owner) did not receive their own code under the GPL license. Therefore they are not bound by the GPL for that code.


Hi wili, you might want to start your own thread, but since we're both here:

When I try "Import Script from Github" on https://openuserjs.org/user/add/scripts it shows a list of my repositories, not my gists.

If your code is in a gist, you probably need to use copy/paste to post it on this site.

You might also need to change the updateURL to the address indicated on that page, instead of your gist address. I don't know if that's mandatory.



Okay, that's interesting. I don't have Tor installed, but I will try to test.

Are changes required to the @include list?


I'm not familiar with that site. When I look at the description on this page, it definitely sounds like the watch list is oriented toward shows they recognize as a series: http://www.tvmaze.com/features

Are there other pages that have the missing information about "specials" you've watched? It's sometimes possible to pull another page in the background and insert some of its contents into the page you're currently viewing. Could be a lot of work...


Why would the site only allow downloads in Chrome? Did you contact them about this problem?


Could I suggest truncating the IP addresses sent to Google Analytics? The benefit of this is that you won't need to worry about responding to requests to coax Google to delete data associated with a specific IP address. While you may lose some precision in your geographic statistics, that level of detail may not be particularly relevant/useful anyway.

You just need to add:

ga('set', 'anonymizeIp', true);

immediately before:

ga('send', 'pageview');

See:


Firefox does not allow WebExtensions to have random access to the hard drive. Storage interfaces are tightly constrained for security reasons.


You probably need a different approach for that.

Firefox extensions (such as Greasemonkey, Tampermonkey, Violentmonkey) cannot write to the desktop without displaying a download dialog, so it's not possible to write a userscript to do that, either.

The exception is those extensions which manipulate an external program (so called "native application"). Maybe there is one along the lines you're interested in. If not, perhaps an external program like AutoHotKey can do it.


By the way, user scripts are written in JavaScript and some things they do involve CSS. For example, by adding a class name to an element, the script can take advantage of a CSS rule that will hide that element.

So there are quite a few things to learn, and unfortunately, this script is a terrible example! The code was built up a little at a time over many years so it's hard to follow. I should take a programming class some time.


Hello, thank you for your comment. I think it's possible to change the way the first list works. Instead of:

  • Block List => notice
  • Perma-ban => invisible
  • default => show

You could:

  • Whitelist => show
  • Perma-ban => invisible
  • default => notice

Since I search for very different things all the time, that wouldn't really work for me, but if you are always searching for the same thing and really only want to see sites you trust on that topic, maybe then it would work.

I think it would be best if someone makes a copy of the script and rewrites it to work that way. It would be very complicated to have the same script work both ways. At least it seems complicated to me (I'm not a programmer).


Conversion is a hidden feature of userstyles.org. Let's say you have this URL:

https://userstyles.org/styles/152417/dashed-green-outline-on-focused-element

The URL to generate a userscript is:

https://userstyles.org/styles/userjs/152417/dashed-green-outline-on-focused-element.user.js

As a bookmarklet:

javascript:var parts=location.href.split('/styles/'); location.href=parts[0]+'/styles/userjs/'+parts[1]+'.user.js'; void 0;

You can convert a few to see the pattern the site uses. It hink you need to manually generate @include/@match for styles that use a regex with @-moz-document.