Friday, March 29, 2024

StopTheMadness Pro

There have been a bunch of neat updates to this browser extension in the last year or so.


[It’s] difficult to edit a long URL in the Safari address bar, especially on iPhone.


Select StopTheMadness from the menu. […] Tap the Edit Tab URL button. […] You can put the insertion point anywhere in the URL without having to struggle or scroll.

StopTheMadness Pro:

StopTheMadness Pro is a Universal Purchase: a single purchase in the App Store for iPhone, iPad, and Mac.


Automatic iCloud sync of StopTheMadness Pro settings between all of your devices


Presets: Easily assign the same specific website options to multiple websites


Hide Page Elements: New global list separate from the custom CSS option, so you can hide web page elements without creating new website options

Contextual menu item to Hide Page Elements (macOS)

It’s a big update, and I like the new icon.

December 15:

There are several reasons why StopTheMadness Pro was released without Chrome and Firefox extensions. First, StopTheMadness Pro now depends on extension native messaging for essential features such as settings and iCloud sync. (The use of native messaging for settings avoids some strict and unfortunate limitations on extension storage.) Safari extensions have built-in support for native messaging, because Safari extensions are distributed as part of native Mac and iOS apps. On the one hand, the native app requirement can be a burden on Safari extension developers, but on the other hand, automatic support for native messaging is a truly wonderful, powerful, game-changing feature. For Chrome and Firefox extensions, the developer must implement native messaging entirely from scratch, which is a lot of work, and it also requires an additional file installation in a location not accessible by sandboxed App Store apps.

StopTheMadness Pro 2:

URL redirect rules can now be made platform-specific. This is helpful if you sync your StopTheMadness settings via iCloud to all of your devices.


“Force link into a new tab” has been split into two options: “Force link into a new active tab” and “Force link into a new inactive tab”. This allows you to choose whether tabs will open in the foreground or the background.

December 27:

Since the App Store doesn’t support paid upgrades either, I decided to create app bundles so that previous customers could upgrade for a discount. There’s one bundle for the iOS App Store and one bundle for the Mac App Store. Ironically, you can bundle a Universal app with an iOS app in the iOS App Store, and you can bundle a Universal app with a Mac app in the Mac App Store, but you can’t bundle an iOS app with a Mac app[…]


I created two app bundles and submitted them for review before 7am. The reason I waited until Tuesday to create the upgrade app bundles is that App Store Connect doesn’t allow you to create an app bundle for an app that hasn’t yet been published to the App Store, not even if the app is Pending Developer Release […] Unfortunately, it turns out that you can’t request an expedited review for an app bundle. The list of app names doesn’t include the app bundles, and if you try to manually enter the app bundle name, the form doesn’t accept it. […] During those two days when StopTheMadness Pro was live in the App Store but the upgrade bundles were not, customers were already starting to notice StopTheMadness Pro, despite the fact that I hadn’t announced it yet. And those customers were very confused, because the approved App Store description of the app mentioned the upgrade bundles, yet the bundles were nowhere to be found in the App Store.


As far as purchases are concerned, the upgrade bundles have not gone as smoothly as I would have liked. My customers generally appreciate the existence of the bundles, but a number of them have contacted me, and continue to contact me, with technical issues regarding the bundle purchases. For example, the full price is shown rather than the upgrade price. The app is not available for download after the bundle is purchased. The App Store gives an error, “This item is temporarily unavailable.”

StopTheMadness Pro 3:

First, the website option “Show native media controls” has been split into two options, “Show native audio controls” and “Show native video controls”, so that you can set them separately. Second, there’s a new website option, “Protect history”. This option stops websites from using the History.pushState and History.replaceState API to manipulate the browser history and address bar. Did you know that websites can literally rewrite history? If going back a page has ever taken you somewhere that you’ve never been and never wanted to be, you were likely experiencing a (mis)use of the History API.

StopTheMadness Pro 5:

Before I talk about the new Chrome and Firefox extensions, I want to mention that StopTheMadness Pro 5.0 includes a bunch of other improvements and fixes. The extension popup window in Mobile Safari finally supports Dynamic Type! In both Mobile and Desktop Safari there’s a new website option, Protect text replacements, which prevents text fields from disabling text replacements.


There were two major downsides to migrating the StopTheMadness Chrome extension away from Manifest Version 2. The first downside is that Manifest V3 removes the ability of Chrome extensions to add custom HTML <script> elements to the web page. […] The second major downside of Manifest V3 is that it’s still very buggy.

StopTheMadness Pro 5.1:

This update includes a number of fixes and improvements, especially related to web video, as well as a new website option, Protect control-key shortcuts, parallel to the website options Protect command-key shortcuts and Protect option-key shortcuts.


StopTheMadness Pro settings are stored separately for each Chromium browser.


3 Comments RSS · Twitter · Mastodon

Jeff is extremely responsive to bugs and suggestions from users, and also operates a Slack channel where anyone is welcome to drop in with questions or issues. Recently I encountered a problem with video playback controls on a particular web site, and he had a fix in for the next update—released later that same day.

It is heartening to see indie devs still making indispensable tools, and communicating about them with such fervour. He sets a good example for other struggling indie devs, like me.

This dev has the balls to tell Phil Schiller to “retire motherfucker” publicly on social media as an indy dev who’s featured on the App Store so he’s got my respect for sure

> He sets a good example for other struggling indie devs, like me.

Thanks! I'm only following in the footsteps of many great developers (like Michael Tsai here!) who preceded me and provided an example for me.

> This dev has the balls to tell Phil Schiller to “retire motherfucker” publicly on social media as an indy dev who’s featured on the App Store so he’s got my respect for sure

It really comes down to one word, "courage".

Seriously, though, Phil isn't reading Mastodon, and I'm featured in the Mac App Store, which is an afterthought to Apple. We're mostly like ants to Apple executives: they may crush us accidentally, but we're too small and low for them to notice.

Leave a Comment