Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
Hello,

So I've got my PowerBook G4 running Aquafox and it definitely freezes if I try to update the search engines...like every time. The only way I can get it closed is to force quit the App from the Finder. Hmmm. Also, where are you talking about I am supposed to "going to DuckDuckGo's settings page and turning off "Redirect (When Necessary)" in the Privacy tab." I cannot find a "DickDuckGo's settings page" anywhere in Aquafox. Where is this setting?

Incidentally I tried adding a search engine (StartPage) in InterWebPPC the exact same way and it worked as expected, no issue, so this is definitely an Aquafox on my PPC issue that I'm experiencing.

Thanks for your help!!

:)
The DuckDuckGo settings can be found by clicking the "hamburger button" in the top right corner and then navigating to "Settings." This is the page you'll want to visit: https://duckduckgo.com/settings#privacy. There, you'll find the "Redirect (When Necessary)" setting; turning it off will fix the redirect issue.

As for the freezing issue, I tested it again, this time on a Power Mac G5 running Tiger, and guess what: it froze. However, after removing my profile, I managed to successfully perform the tasks. Perhaps there is a different way to set the search engine, such as in about:config or by transferring the data from one profile to another.
 
@thewireless I get this now, trying to open an issue on GitHub. Aquafox is pre-built from your GH tag, not built from source locally.
The problem is not exclusive to Aquafox, I get the same with InerWebPPC now.
(Over time I have seen weird issues with how GitHub site works in TFF and its derivatives. I have no idea what causes that.)

github.png
 
@thewireless I get this now, trying to open an issue on GitHub. Aquafox is pre-built from your GH tag, not built from source locally.
The problem is not exclusive to Aquafox, I get the same with InerWebPPC now.
(Over time I have seen weird issues with how GitHub site works in TFF and its derivatives. I have no idea what causes that.)
This is the unfortunate reality that all TenFourFox-based browsers face, and it will only get worse. As websites continue to incorporate more and newer JavaScript into their code, they will become increasingly broken in older browsers like Aquafox. Your screenshot is very reminiscent of what opening a GitHub issue looks like in Firefox 134 with JavaScript turned off, so I really think this is a JavaScript issue. I do not possess the experience and know-how that Cameron Kaiser has, so I do not believe a future where we have modern JavaScript support in Aquafox falls within my capabilities. Polyfills have been suggested, but I'm afraid I need more people on board if we actually want to implement new features.

P.S. I've been wanting to update Aquafox on MacPorts, but since compilation fails on both my G5s, there is no way I can test it.
 
React is a JavaScript library so when a web app is in production, tools like babel already transpiled react to js. The issue is in the JavaScript engine inside de browser. No web browser supports react, just JavaScript.
 
Last edited:
This is the unfortunate reality that all TenFourFox-based browsers face, and it will only get worse. As websites continue to incorporate more and newer JavaScript into their code, they will become increasingly broken in older browsers like Aquafox. Your screenshot is very reminiscent of what opening a GitHub issue looks like in Firefox 134 with JavaScript turned off, so I really think this is a JavaScript issue. I do not possess the experience and know-how that Cameron Kaiser has, so I do not believe a future where we have modern JavaScript support in Aquafox falls within my capabilities. Polyfills have been suggested, but I'm afraid I need more people on board if we actually want to implement new features.

P.S. I've been wanting to update Aquafox on MacPorts, but since compilation fails on both my G5s, there is no way I can test it.
some maniacs have gotten modern UXP to compile on PPC Linux so you could maybe try and borrow some code from it
 
Its because there isn't an appropriate font installed to provide the emojis, so some of the older emojis fall back to whatever symbol font happens to provide the same codes.

There is code in the Mozilla codebase to load a color emoji font (Twemoji), search for the code ifdef-ed behind MOZ_BUNDLED_FONTS. However, you will need to patch it up, as TenFourFox replaced all of the used CoreText code with ATS code but not for the calls that load the fonts as it is normally unused (gfxMacPlatformFontList::ActivateBundledFonts()), and some changes are required to package it correctly (see https://github.com/Jazzzny/interweb55-snowleopard/commit/09595caf57649abb4d98a0cd739841cf106d82e3)

View attachment 2471772

I have looked into replacing the CoreText code with ATS code, but I couldn't find any equivalent functions that work. I've read through the documentation and even consulted an LLM (which seemed to be on hallucinogens). I must admit that I have no experience with any of the Apple frameworks and APIs; most of my work thus far has been small CLI applications. This appears to be a dead end for me. If you have any ideas on how to proceed, I would be happy to hear them.
 
From a quick search, it looks like ATSFontActivateFromFileSpecification would be the closest thing, if you haven't tried it yet. https://web.archive.org/web/2013051...cocoa/203330-how-do-embed-font-in-an-app.html
I actually tried that one, but I couldn't get it to work; I probably wasn't using it properly. It's been nearly a month, so I don't really remember. Thank you for the Internet Archive link! I've had a lot of trouble finding useful information on the current web and didn't think to search the archive. I will likely look into this again in the near future.
 
  • Like
Reactions: Project Alice
Ok, guys, I just updated my iMac G4 to be able to use teh Interwebs with Aquafox and still can't get it to work.
What am I doing wrong?
Image quiz attached ;-)
Thanks for your great work anyway!
Screenhot 1.png
 

Attachments

  • Screenhot 1.png
    Screenhot 1.png
    345.7 KB · Views: 39
Ok, guys, I just updated my iMac G4 to be able to use teh Interwebs with Aquafox and still can't get it to work.
What am I doing wrong?
Image quiz attached ;-)
Thanks for your great work anyway!
View attachment 2483050
I see you are using version 10.4.6. The minimum requirement for any TFF-based browser is 10.4.9. I recommend updating to the latest version of Mac OS X Tiger, which is 10.4.11. You can do this by selecting "Software Update" from the Apple menu.
 
  • Like
Reactions: barracuda156
I see you are using version 10.4.6. The minimum requirement for any TFF-based browser is 10.4.9. I recommend updating to the latest version of Mac OS X Tiger, which is 10.4.11. You can do this by selecting "Software Update" from the Apple menu.
Oh, got it. Thank you!
 
This is the unfortunate reality that all TenFourFox-based browsers face, and it will only get worse. As websites continue to incorporate more and newer JavaScript into their code, they will become increasingly broken in older browsers like Aquafox. Your screenshot is very reminiscent of what opening a GitHub issue looks like in Firefox 134 with JavaScript turned off, so I really think this is a JavaScript issue. I do not possess the experience and know-how that Cameron Kaiser has, so I do not believe a future where we have modern JavaScript support in Aquafox falls within my capabilities. Polyfills have been suggested, but I'm afraid I need more people on board if we actually want to implement new features.

You can count me on-board.

@Ryan Bremer and others have been doing some amazing work in another thread getting individual websites working with Greasemonkey:


Certainly anything under the hood would also be helpful; however, I think the easiest way forward with Javascript support may be to expand the existing userscripts effort.

Possibly, this could include some modification of Greasemonkey 3.11 to allow for some default global scripts and maybe adding some default Polyfills, such as those suggested by @f54da in one of the posts (replaceAll, matchAll, flat and flatMap), and perhaps eventually including parts from Palefill.

We could also consider using a similar approach as the plugin LocalCDN with a different goal of dealing with bloat, by creating slimmed down and optimized versions of slow scripts that work specifically on Aquafox.

No doubt, this will take a concerted community effort, but it seems like it may take less than some of the other options in front of us, and provide a long-term solution which can yield benefit for users every step of the way.
 
Last edited:
  • Like
Reactions: Ryan Bremer
You can count me on-board.

@Ryan Bremer and others have been doing some amazing work in another thread getting individual websites working with Greasemonkey:


Certainly anything under the hood would also be helpful; however, I think the easiest way forward with Javascript support may be to expand the existing userscripts effort.

Possibly, this could include some modification of Greasemonkey 3.11 to allow for some default global scripts and maybe adding some default Polyfills, such as those suggested by @f54da in one of the posts (replaceAll, matchAll, flat and flatMap), and perhaps eventually including parts from Palefill.

We could also consider using a similar approach as the plugin LocalCDN with a different goal of dealing with bloat, by creating slimmed down and optimized versions of slow scripts that work specifically on Aquafox.

No doubt, this will take a concerted community effort, but it seems like it may take less than some of the other options in front of us, and provide a long-term solution which can yield benefit for users every step of the way.

Thank you for your message; I'd be glad to have you. I know a little bit of JavaScript—enough to understand what it does, but not enough to create any userscripts of my own. I think it should be possible to inject polyfills without the need for an extension like Greasemonkey (tab-content.js?). Regardless, I was already planning to fork janekptacijarabaci/greasemonkey and UCyborg/uBlock-for-firefox-legacy and make some adjustments, just to have the most updated versions of these add-ons available for Aquafox.

As for LocalCDN, I've looked into the source of Decentraleyes to see how feasible it would be to update and expand version 1.4.2/1.4.3 with newer frameworks found in LocalCDN, but I didn't consider customizing the scripts. I must admit that these ideas were formed and explored in 2024 but were never brought to fruition, as I've simply gotten busy with other responsibilities. The little free time I have is usually not spent on Aquafox-related research and development. I hope to be able to make some time for this because I do want to make Aquafox better.

Looking forward to hearing your thoughts and working together on this!
 
  • Like
Reactions: GA204
Thank you for your message; I'd be glad to have you. I know a little bit of JavaScript—enough to understand what it does, but not enough to create any userscripts of my own. I think it should be possible to inject polyfills without the need for an extension like Greasemonkey (tab-content.js?). Regardless, I was already planning to fork janekptacijarabaci/greasemonkey and UCyborg/uBlock-for-firefox-legacy and make some adjustments, just to have the most updated versions of these add-ons available for Aquafox.

As for LocalCDN, I've looked into the source of Decentraleyes to see how feasible it would be to update and expand version 1.4.2/1.4.3 with newer frameworks found in LocalCDN, but I didn't consider customizing the scripts. I must admit that these ideas were formed and explored in 2024 but were never brought to fruition, as I've simply gotten busy with other responsibilities. The little free time I have is usually not spent on Aquafox-related research and development. I hope to be able to make some time for this because I do want to make Aquafox better.

Looking forward to hearing your thoughts and working together on this!
My thought is that the easiest way to get things rolling could be to add Polyfill function definitions for missing Javascript functions based on what seems to be needed the most, first trying them in Greasemonkey and then later adding them to Aquafox directly once they are well-tested.

Both Cameron Kaiser ( in http://tenfourfox.blogspot.com/2020/04/the-end-of-tenfourfox-and-what-ive.html ) and @f54da ( in the userscripts thread ) seem to have mentioned a few high-yielf functions that we should perhaps look at adding first: async, await, replaceAll, matchAll, flat and flatMap.

For async/await, I'd have to see what Aquafox supports, but there are some good resources out there, including about the old ways web devs used to handle asynchronous Javascript requests through callbacks and promises:

For replaceAll, this should be simple, and the smallest polyfill I've found (which is ISC open-source licensed, from https://www.npmjs.com/package/replaceall-shim?activeTab=code ) is:

JavaScript:
if(!String.prototype.replaceAll) {
  String.prototype.replaceAll = function(subStr, newSubStr){
    return (Object.prototype.toString.call(subStr).toLowerCase() === '[object regexp]') ?
      this.replace(subStr, newSubStr) :
      this.replace(new RegExp(subStr, 'g'), newSubStr);
  }
}

Although, there are also other options.

For matchAll, there is a good discussion about polyfills in this Github page - https://gist.github.com/TheBrenny/039add509c87a3143b9c077f76aa550b

For array.flat and array.flatMap, there's the following Polyfill code and discussion which seems helpful

Once these (and any other suggested high-yielf functions) are implemented, the next step could be to go through the EMCA standard and implement missing functions from easiest to hardest:

There are of course some poorly and undocumented features in Google Chrome that would still cause some websites not to work, but we could always worry about these later.
 
async/await cannot be polyfilled because it is syntax, much like null-coalescing. However it can be transpiled (to generators + promises), e.g. in a pinch I have used esbuild to transpile the syntax down to a compatible version.

There is already a list of well-maintained polyfills for all of ecmascript, unfortunately it's sort of entangled with the rest of the NPM ecosystem so I've never figured out how to cleanly isolate it. I usually just copy paste polyfills from google's closure library https://github.com/google/closure-c...gle/javascript/jscomp/js/es6/array/flatmap.js because unlike NPM polyfills it's just simple and direct (wtf is this nonsense https://github.com/es-shims/Array.prototype.flatMap/blob/main/implementation.js)

ESBuild only seems to transpile syntax not add polyfills, but I'm sure there's probably a way to add a polyfill step in there too. So once you get that working it's a 1-step procedure to convert any JS file into something that will work on any es5-compatible browser.
 
Last edited:
async/await cannot be polyfilled because it is syntax, much like null-coalescing. However it can be transpiled (to generators + promises), e.g. in a pinch I have used esbuild to transpile the syntax down to a compatible version.

There is already a list of well-maintained polyfills for all of ecmascript, unfortunately it's sort of entangled with the rest of the NPM ecosystem so I've never figured out how to cleanly isolate it. I usually just copy paste polyfills from google's closure library https://github.com/google/closure-c...gle/javascript/jscomp/js/es6/array/flatmap.js because unlike NPM polyfills it's just simple and direct (wtf is this nonsense https://github.com/es-shims/Array.prototype.flatMap/blob/main/implementation.js)

ESBuild only seems to transpile syntax not add polyfills, but I'm sure there's probably a way to add a polyfill step in there too. So once you get that working it's a 1-step procedure to convert any JS file into something that will work on any es5-compatible browser.

Sounds like we will need a pre-processor to complement polyfilling.

Admittedly, it's been about a decade since I used to do front-end web development, so I'm a bit out of date about the new tools and APIs. However, I can think of a few ways we can accomplish simple pre-processing to convert "async function xyx () { ...}" to something like "function xyz () { return async_polyfill(function () { ... }); }" so we can use a polyfill or template code:

1.a) We could do it at the Javascript level, such as using some tool like babel (or esbuild?), or coding our own pre-processor possibly using the ".innerHTML" property, the debugger API, or some other means. The disadvantage is that this may require a fair amount of processing power.

1.b) We could do it at the extension level, which would likely result in a similar outcome with doing it in Javascript (since the extensions are written in Javascript), although it may give us access to more of the API to make it work more efficiently.

2. We could do it at the browser level, altering the C code for Aquafox, albeit this may be a tall order, since there seems to be quite a bit of code and documentation to read before one can become familiar enough with the structure of Firefox to know how best to implement a new feature. However, this would likely be the best option in terms of computing performance.

3. While perhaps a little crude, we could also do it at the connection level. I already have a proxy program that is pretty lightweight (about 1000 lines of code) and could easily be modified to allow it to pass data through an external pre-processor program that we could write. This could be done in C, which would give a performance advantage over Javascript, and it could also be used to interface with Leopard Webkit, Safari and other browsers.

Let me know your thoughts on the above.
 
you can combine esbuild with a proxy. Wowfunhappy has a reverse proxy written in Go, and since esbuild is in go the two should fit together nicely.
 
The polyfill idea and utilizing reading mode in TenFourFox/Aquafox is the way forward. Cameron Kaiser specifically revamped reading mode in this last set of updates. You can now set any site to automatically open in reading mode by default under Settings. Additionally, reading mode is now stickied in the address bar. For example, I like The New York Times for basic news, so in my TenFourFox settings, I have nytimes.com in my list of reading list sites. Now, whenever I visit the nytimes.com domain, all(you can specify just the url or url and all pages under the domain) subsequent pages under that domain stay in reading mode, displaying the articles and relevant information with the articles content/pictures. Between this and polyfills, these are the best solutions going forward while respecting the age of these machines. There really great ideas!
 
Last edited:
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.