Martii Moderator

Your entire script loads external scripts and injects them into the respective matches from a third party domain.

You should refactor this to be more transparent soon before it and you are eligible for removal.




Re: @sahil289:

... is there a way to view old versions of a userscript hosted on this website...

OUJS is a Presentational Userscript Repository only. So no. Use GitHub if you want full SCM functionality at this time.


Re: @sjehuda:

The Kiwi Browser at Google Play currently mentions as of Mar 20, 2023:

  • Updated Chromium to 107.0.5304.66.

... whereas my distros Chromium is currently at 111.0.5563.110 via snap. Chromium itself is probably at an even newer revision. None of this necessarily means it's "bad" but it does mean it's behind the current security patches.

Anyhow... you tell us if it works natively or if you need a .user.js engine. I would suspect it needs a .user.js engine like Tampermonkey (TM) or Violentmonkey (VM) like most Chromium based browsers (there are exceptions to this).



Re: @sjehuda:

Did anyone try...

Tried... no. Skimmed... yes. Seems a rather new feature from their repository history.

... support for Userscripts

Limited from what I can tell at this time.

As with Tampermonkey for Android you might run the risk of it's base core, Chromium, being out of date. i.e. possible browser security vulnerabilities.

You tell us. :)


Re: @Fryuni:

As far as Chromium/Chrome is concerned the @match syntax is standardized here. Both match pattern are definitely not listed there.

As far as Greasemonkey (GM) is concerned the latest change to the script and it's original broke the script because it is an invalid @match pattern. Tampermonkey (TM) allows it but it probably isn't working as expected.

Re: @chubby_cows:

Today the @match param is *, but this do not match URLs with path such as "https://www.semparar.com.br/assine-com-cashback". To fix, I suggest to use **/** that will both match "https://www.semparar.com.br" and "https://www.semparar.com.br/assine-com-cashback"

As I stated to @Fryuni this is incorrect... however:

--- /scripts/Fryuni/Use_Croct_experimental_endpoints/source@0.3.0-beta2+0af881b
+++ /scripts/Fryuni/Use_Croct_experimental_endpoints/source
@@ -7,7 +7,7 @@
 // @updateURL    https://openuserjs.org/meta/Fryuni/Use_Croct_experimental_endpoints.meta.js
 // @downloadURL  https://openuserjs.org/install/Fryuni/Use_Croct_experimental_endpoints.user.js
 // @description  Plugs Croct with the experimental endpoints. Configurable with Ctrl+Alt+C.
-// @match        **/**
+// @match        *://*/*
 // @icon         https://www.google.com/s2/favicons?sz=64&domain=croct.com
 // @run-at       document-body
 // @require      https://openuserjs.org/src/libs/sizzle/GM_config.js

... on the current source should do what you want.


--- /scripts/Fadexz/Start_YouTube_Autoplay_Off/source@1.1.2+63ce05b
+++ /scripts/Fadexz/Start_YouTube_Autoplay_Off/source
@@ -6,7 +6,7 @@
 // @copyright       2022, Fadexz (https://openuserjs.org/users/Fadexz)
 // @license         MIT
 // @version         1.1.2
-// @match           http*://www.youtube.com/watch?*v=*
+// @match           *://www.youtube.com/watch?*v=*
 // @run-at          document-end
 // @grant           none
 // ==/UserScript==

... .. should make it a valid @match syntax from the standard documentation.

Thanks for the look.


Re: @sjehuda:

I'm using Falkon.

Assuming Falkon still has debugging try that.

I've also tried with FF.

Do Ctrl+Shift+J for the Browser Console and click the gear icon in the far upper right to ensure that all items are ticked on esp. Show content message. Then ensure that Errors and Warnings are selected to the left and any other item you wish to debug.

The library that it uses for the @require, as you probably know, is at https://www.npmjs.com/package/darkreader . Once you have done the minimum steps for debugging to determine if there errors specific to that script (try running only that .user.js too) showing up then you could possibly go to the repo referenced at npmjs. As far as the top level script goes, esp. since it is so small i.e. a stub loader, I don't see anything else that can improve the .user.js any further.

If all the browsers fail it's possible there's something at the target site you are trying to apply it to that prevents script injection too. Manual injection isn't the same as a .user.js injection (different permissions in every browser usually).

Again Good luck.


What needs to be done in order to make Dark Reader work as a UserScript?

Can't say for sure since you didn't give a target to test against but I don't see GM_addStyle used either in the primary top level script nor the current @required library... so possibly try some code improvements of:

--- /scripts/wenhairu/Dark_Mode/source@1.0.0+a6a8e07
+++ /scripts/wenhairu/Dark_Mode/source
@@ -2,7 +2,7 @@
 // @name        Dark Mode
 // @namespace   darkreader.org
 // @match       *://*/*
-// @grant       GM_addStyle
+// @grant       none
 // @icon        https://p.pstatp.com/origin/ff740000b3f19de1691e
 // @version     1.0.0
 // @author      wenhairu
@@ -11,4 +11,6 @@
 // @require https://cdn.jsdelivr.net/npm/darkreader/darkreader.min.js
 // ==/UserScript==
 
-DarkReader.auto({brightness:100,contrast:90,sepia:10});
\ No newline at end of file
+/* globals DarkReader */
+
+DarkReader.auto({brightness:100,contrast:90,sepia:10});

I would also give it a whirl in Greasemonkey (GM) itself with Firefox. Presuming that you are using Chrome, Tampermonkey (TM) and Violentmonkey (VM) do things slightly different inside the extension. If you need to test older GM you may try SeaMonkey with Greasemonkey Port (GM Port).

Good luck.



Re: @sjehuda:

I stand corrected. Both are OK

Well that leaves the "voodoo" for Fx as far as I can tell.

HTTP headers can (and are) spied on inside the browser... Fx may not know how to handle otters abrupt termination of the message and thus you get a default download prompt with headers that are handled internally (if at all... could just be a silently ended process) and not passed to an extension or even the Browser Console. This could be a feature this could be a bug... unfortunately diagnosing that is beyond the scope of OUJS... but that should give you some things to consider searching for. You'll need to have a decent understanding of CPP and Qt/GNU compiler languages too in order to debug this properly.

You might submit your stack trace to TM and see if he can decipher it a bit more. TM also abstracts a lot of the core JavaScript prototypes (because TM has to to work) and work your way up to bugzilla.


Re: @sjehuda:

I don't know how to handle this error:

Just use var or let.... it's ES6+ syntax to use const... on a note if you are getting a re-declaration error that usually means your script is running in the same identifier context more than once in that particular routine. let can help with that since it's technically ES5.1 and goes "out of scope" when it hits a bracket.


Re: @sjehuda:

What do you get for https://otter-browser.org/feed/ ?
With Fx, I get a download prompt.

Download prompt and silent error iteration.

Luckily Chromium shows what the error is:

Unchecked runtime.lastError: The message port closed before a response was received.
otter-browser.org/:1 Unchecked runtime.lastError: The message port closed before a response was received.

That particular feed seems to be doing some "voodoo" against Fx. i.e. Content-Disposition and related HTTP headers that get intercepted internally by Fx and Chromium.

Re: @sjehuda:

It works with Falkon, but not with Fx

You have to remember that Falkon is an abstracted WebKit/V8 fork (Qt) so they might have different implementations than standard CPP to JavaScript. The syntax of the core of the browser is typically CPP with a toolkit Qt browser vs native CPP and non-Qt (GNU to be exact) toolkits... so expect some differences in ECMAScript implementation.


Re: @sjehuda:

or any other feed that doesn't cause to download prompt to open.

Haven't been prompted for that here... it's always loaded in the page here. PHP can do that as well depending on region, browser, etc.


Re: @sjehuda:

This script has to be inclusive.

For debugging purposes do as you just said here with:

test against https://kodi.tv/rss.xml

Temporarily, or create a temporary script, and debug against that include specifically. Chromium decodes the feed but the prior reply I did with Fx shows a contentscript.js error... that can be Userscripts or just the browser itself. Same with document.head too.


Re: @sjehuda:

We can always test against https://kodi.tv/rss.xml or any other feed that doesn't cause to download prompt to open.

Just did that in Fx with GM... and I get errors:

Error: Can't find profile directory. XULStore.jsm:66:15
sendRemoveListener on closed conduit {7a7a4a92-a2a0-41d1-9fd7-1e92480d612d}.687194767373 ConduitsChild.jsm:112
TypeError: document.body is null contentscript.js:94:1
document.head is null content.js:675

... the document.body is null one is suspect for failure of DOMParser.parseFromString if I recall correctly. The others are internal to Fx. Debugging in Fx isn't exactly pleasant any more so sometimes I have to hop to Chromium with TM to get a clearer picture.



Re: @sjehuda:

Only when using Tampermonkey for Firefox...

Here should be a more readable stack trace (newline escaped removed to actual and some indention):

{
  name: "",
  message: "",
  result: 2153775105,
  filename: "moz-extension://21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0",
  lineNumber: 181,
  columnNumber: 0,
  data: null,
  stack: "renderFeed@moz-extension://21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:181:17
  checkMediaType @moz - extension: //21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:138:15
    httpGetAsync / xmlHTTPRequest.onreadystatechange @moz - extension: //21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:85:15
    EventHandlerNonNull * httpGetAsync @moz - extension: //21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:69:3
    tms_acd40735_0cb5_4484_bcb0_b1d674174df0$ @moz - extension: //21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:249:13
    it @https: //www.blacklistednews.com/rss.php:14:1075
    window[\"__p__13666865.141279189\"]/</<@moz-extension://21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:1:131
      window[\"__p__13666865.141279189\"]/<@moz-extension://21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:1:531
        window[\"__p__13666865.141279189\"]@moz-extension://21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:251:6
          it @https: //www.blacklistednews.com/rss.php:14:1075
          set @https: //www.blacklistednews.com/rss.php:3:400
          @moz - extension: //21fd3529-b958-4444-a848-78dc744a32b7/userscripts/Newspaper.user.js?id=acd40735-0cb5-4484-bcb0-b1d674174df0:1:1
          it @https: //www.blacklistednews.com/rss.php:14:1075
          I[t] @https: //www.blacklistednews.com/rss.php:4:485
          it @https: //www.blacklistednews.com/rss.php:14:1075
          y @https: //www.blacklistednews.com/rss.php:6:40
          send @https: //www.blacklistednews.com/rss.php:7:128
          V @https: //www.blacklistednews.com/rss.php:3:307
          E_u / < @https: //www.blacklistednews.com/rss.php:4:275
          E_u @https: //www.blacklistednews.com/rss.php:4:330
          create / < @eval: 64: 45 create @eval: 65: 178 l @eval: 6: 96 n @eval: 5: 325 run @eval: 6: 188 TM_back / < /</ < @eval: 67: 49 it @https: //www.blacklistednews.com/rss.php:14:1075
          t @https: //www.blacklistednews.com/rss.php:15:366
          TM_back / < /<@eval:67:30
          TM_back / < @eval: 67: 59 TM_back @eval: 68: 3 window[\"__c__10191374.835477514\"]@eval:68:10
            it @https: //www.blacklistednews.com/rss.php:14:1075
            set @https: //www.blacklistednews.com/rss.php:3:400
            @eval: 1: 1 "
}

It points to xsltProcessor.importStylesheet(xsltStylesheet);

DOMParser.parseFromString has been notoriously different between browsers (a.k.a finicky) over the years on how it handles Strings and might be throwing an error since you don't appear to be checking for that.

Are you sure that 181 is that line... usually the line before that could also be suspect where you set it to null currently here. Try not doing your own garbage collection and let JavaScript do it for you... or even try undefined instead of a null Object assignment for a possible work-around.

falkon 22.04.0-1 (x86_64) - Arch Linux

Fun... nothing like non-matching version numbers between Arch and non-Arch. My Arch VM hasn't been around since the Qupzilla days but perhaps in time (when I have it) I can peruse the source and see what it might be doing different than Fx... however I'm still swamped with real life duties atm... probably until the end of the month.

Your XML appears to be validated properly so I'm taking a wild guess there is a JavaScript issue with the implementation. You might see if any of your isolated areas of your code are mentioned on bugzilla.

The RSS feed appears at a very quick glance to be correct too... but that's a dynamic data stream and can produce different results on-the-fly especially since it's PHP.


Re: @sjehuda:

... on Falkon

I suppose I could fire up a VM of Windows...

Fun... Windows binary installation is currently 3.1.0 and snap is 3.2.0. Windows has GreaseMonkey extension (and a weird mirrored and rotated 180d falkon:start page); snap does not have the GreaseMonkey extension.

WSL 1 was running about a year'ish or so ago on Windows 10... however current WSL 2 doesn't work on dev station VM (neither does WSL 1 last try). So can't get windows snap installed to even try the Ubuntu version on Windows... although running it directly on Ubuntu as previously mentioned.


Re: @sjehuda:

Is it possible to add ... groups

  1. You may onlycreate one per script... it is a feature.
  2. You may add your script to any existing group.

Is it possible to ... remove groups

Groups are more or less permanent at this time.


Re: @sjehuda:

https://openuserjs.org/scripts/sjehuda/Newspaper

Apparently, this script doesn't work with Firefox (tested against Greasemonkey and Tampermonkey)

I've briefly skimmed over the script syntax and I don't see anything right away that would prevent it from working. Do you get any errors/warnings in Browser Console specific to the script?

However, since Firefox has dropped RSS ...

Never utilized that feature however I do briefly check in Firefox (Fx) the XML generated before importing into Thunderbird's (TB) feeds which definitely supports RSS and atom feeds (and obviously not a Userscript engine there).

... on Falkon

Btw what version of Falkon are you using please. I loaded in their latest under Linux and there is no GreaseMonkey (last known properly casing) extension via their snap but is present via current distro (which is older). As the AM of the site it is on my lengthy TODO list to verify the on-site documents.

I suppose I could fire up a VM of Windows and check that in a bit but anyone attempting to diagnose your question would need to know to compare.


Your users (and perhaps you) aren't getting updates.

If you want them to please make this recommended change:

--- /scripts/alike03/allkeyshop.com_Real_Prices/source@1.2+3b8a779
+++ /scripts/alike03/allkeyshop.com_Real_Prices/source
@@ -8,7 +8,7 @@
 // @icon        https://www.allkeyshop.com/favicon.ico
 // @updateURL   https://openuserjs.org/meta/alike03/allkeyshop.com_Real_Prices.meta.js
 // @supportURL  https://openuserjs.org/scripts/alike03/allkeyshop.com_Real_Prices/issues
-// @downloadURL https://openuserjs.org/src/scripts/alike03/allkeyshop_com_real_prices.user.js
+// @downloadURL https://openuserjs.org/src/scripts/alike03/allkeyshop.com_Real_Prices.user.js
 // @require     https://code.jquery.com/jquery-3.6.0.slim.min.js
 // @copyright   2021, alike03 (https://openuserjs.org/users/alike03)
 // @license     MIT

... plus it should clear your Source Code notice.

You have another issue on your other published script too that is similar in nature (partial yt vs. Youtube, etc. which points to a non-existent script).


Re: @trashbambi:

I tried adding 'the', as well as some other common words, to both scripts, saving, then refreshing twitter with F5, but neither did anything.

It's addable there however the line that contains .stream-item (and .js-tweet-text in the other gist script) doesn't appear to exist any more in the Twitter HTML source. i.e. neither script will work as is. Unfortunately a lot of work will be needed to find the right "item" i.e. text since it looks like they are randomizing classes and ids per session. Example on my end with someones tweet item:

<div lang="en" dir="auto" class="css-901oao r-18jsvk2 r-37j5jr r-a023e6 r-16dba41 r-rjixqe r-bcqeeo r-bnwqim r-qvutc0" id="id__mp586pr0e"><span class="css-901oao css-16my406 r-poiln3 r-bcqeeo r-qvutc0">I can't provide

... rather obfuscated at the actual item (available source for someone to peruse if they take this task up as well).

I'm not sure how to do the rest of what you suggested

Read... https://developer.chrome.com/docs/devtools/console/log/ and just remove the // from the //console lines so they actually run. All found with a search engine. :)

Anyhow... I don't usually write scripts for others since I have enough on my plate and I actually don't visit Twitter that often so I wouldn't be able to maintain a release. Perhaps someone else could step in for you.

or even what type of code these are written in

JavaScript