Sorry to break it to you, but yes, they are.
Now I'm on Android, and Ironfox is pretty good and Firefox is also available. The browser story on Android is leaps and bounds ahead of iOS.
Also names like "Adblock Plus" scare me. I don't want someone I don't trust getting my web activity.
Otherwise, though, Safari still supports MV2. Everyone seems to think webRequestBlocking is the only relevant change in MV3, but it's not. Equally important IMO is arbitrary JavaScript injection into web pages, which MV2 allows but MV3 does not.
MV3 is so locked down that you can't even use String.replace() with a constructed JavaScript function. It's really a nightmare.
Google's excuse is that all JavaScript needs to be statically declared in the extension so that the Chrome Web Store can review it. But then the Chrome Web Store allows a bunch of malware to be published anyway!
George Carlin: "You don't need a formal conspiracy when interests converge. These people went to the same universities, they're on the same boards of directors, they're in the same country clubs, they have like interests, they don't need to call a meeting, they know what's good for them and they're getting it."
The interests of APPLE (who makes money on hardware, and credit card processing) don't align with the interests of Google (who makes money on ad's). I am all for open source, I'm all for alternatives. But honestly if you own an iPhone and a Mac then safari makes a lot of sense. I happen to use safari and Firefox on Mac and am happy to bounce back and forth.
I also keep an eye on ladybird, but it isnt ready for prime time.
And I'm still going to have a chrome install for easy flashing of devices.
In Chrome 135, which is very recent—the public is currently on Chrome 138—Google added an execute() method to run an individual script. However, the API is not available from the extension content script, so if it needs to be triggered from the content script, you have to make an async call to the background script (or more accurately, the background service worker, which is a whole other nightmare of MV3). Moreover, the API accepts only a string for JS code or a filename; you still can't use a Function() constructor for example.
In Chrome 138, the current version, Google switched from developer mode to a dedicated userscripts permission toggle in the extension details, which is disabled by default. I think Google is still working on but has not finished a permissions request API. Remember this is almost SEVEN YEARS after Google first announced Manifest V3. The entire time, Google has been stalling, foot dragging, practically getting dragged kicking and screaming into doing the least possible work here.
Surprisingly this async serialize/deserialize nature of the API (https://github.com/Tampermonkey/tampermonkey/blob/cdfc253c07... ?) somehow still manages to inject and execute scripts fast enough to make them act like content scripts at document_start. The only problem is no arbitration between extensions, cant force Tampermonkey inject before uBO (tons of adblock filters disable functions required for Tampermonkey and effectively kill Tampermonkey in the process).
However, the software seems safe. Their privacy policy says they only store websites locally, and never upload them to servers. The app is also open-source.
Ad Block Plus is not privacy respecting. They collect usage data as well as unique device identifiers.