A new spam policy for “back button hijacking”
Posted by zdw 7 days ago
Comments
Comment by p4bl0 7 days ago
I don't understand how Google's indexing work anymore. I've had some website very well indexed for years and years which suddenly disappeared from the index with no explanation, even on the Search Console ("visited, not indexed"). Simple blog entries, lightweight pages, no JavaScript, no ads, no bad practices, https enabled, informative content that is linked from elsewhere including well indexed websites (some entries even performed well on Reddit). At the same time, for the past few years I've found Google search to be a less and less reliable tool because the results are less often what I need.
Anyway, let's hope this new policy can improve things a little.
Comment by SoftTalker 6 days ago
There's yer problem....
Google isn't interested in helping people find pages with no ads.
Comment by csomar 7 days ago
Basically, they are turning search into Tiktok. If you try to make a search, you'll notice that now they give precedence to AI overview, Youtube, News stories, Maps, Products, etc. Anything but content.
tl;dr: content is dead in Google search.
Comment by rbits 6 days ago
To me, it appears to relate to search
> Pages that are engaging in back button hijacking may be subject to manual spam actions or automated demotions, which can impact the site's performance in Google Search results.
Comment by csomar 6 days ago
Comment by mimsee 6 days ago
Comment by csomar 6 days ago
Comment by johnpork343 6 days ago
Comment by mx7zysuj4xew 6 days ago
Comment by Aerolfos 6 days ago
We know perfectly well who they are.
Comment by knollimar 6 days ago
Comment by gunapologist99 6 days ago
I personally use Brave Search and perplexity for those very rare instances when brave search doesn't instantly find what I am looking for. Literally the only thing I (rarely) miss from google is super-deep support for boolean search operators, but then I just tag a !g (exactly like DDG's brilliant bangs) on the end and that works. (I also tried Kagi and did like it, but didn't find compelling differences over Brave Search, especially compared to brave search's excellent and free AI.)
Comment by eks391 5 days ago
Comment by direwolf20 6 days ago
Comment by flexagoon 6 days ago
Comment by mx7zysuj4xew 6 days ago
Comment by daemon325 6 days ago
I respect a lot of them, people I respect a lot, and I saw people like Jon Gjengset use it. so I gave it a few months of daily use. I just eventually drifted back to Google. The results weren't better for anything I search for. It felt different, but not better in any measurable way. $10/mo for a different feel is a strange value prop.
DuckDuckGo sits in the same spot for me. I want to like it, and I don't think one company should own web search, but when I need to find something Google finds it first. I wish the answer were different, but that's just how things are.
Comment by Barbing 6 days ago
Thought Kagi would want the strange part to be, say:
"strange to let advertisers cover your monthly search bill, trading your privacy and using Google--we're only ten bucks a month!"
So, pay for peace of mind.
(do recognize $10 is an entire e.g. daily wage for some)
Comment by Ferret7446 4 days ago
Comment by direwolf20 3 days ago
Comment by yegg 6 days ago
Comment by mtwshngtn 6 days ago
And I've found it so good that I haven't used Google, except by accident, in the past 18 months.
Comment by jmull 6 days ago
Comment by direwolf20 5 days ago
Comment by rat_on_the_run 6 days ago
Comment by declan_roberts 6 days ago
Comment by raydev 6 days ago
If you’re hinting at an argument about whether lazy loading content should exist, that’s a separate discussion. In my experience, pages that override ctrl+f do it for a good reason
Comment by johnfn 6 days ago
Every single other page that does it just wastes my time. It's always a super janky slow implementation that somehow additionally fails to actually search through all the text on the page.
Comment by mghackerlady 5 days ago
Comment by xur17 6 days ago
Comment by MrDOS 6 days ago
Comment by sieabahlpark 4 days ago
Comment by kube-system 6 days ago
Comment by hansvm 6 days ago
Comment by underdeserver 6 days ago
Comment by RugnirViking 5 days ago
Comment by magiclaw 6 days ago
Comment by darajava 6 days ago
Comment by stronglikedan 6 days ago
Comment by Cider9986 6 days ago
[1] https://fmhy.net
Comment by aldos 6 days ago
Comment by blfr 6 days ago
Comment by myself248 6 days ago
I agree, ecommerce sites are the place that I most often want to open several items in tabs and decide between them, and the place this function is most often blocked! I wish I could scream at the jerk who implemented this, but that jerk is not among the options of screamable people.
Comment by fragmede 6 days ago
It's entirely possible the browser itself does, but that the site's JavaScript is (also) overriding the right click handler. There's browser extensions to override their override but having to do that is stupid.
Comment by kevincox 6 days ago
Comment by mghackerlady 5 days ago
Comment by myself248 6 days ago
Comment by eastbound 6 days ago
Comment by matusfaro 4 days ago
The proper way is to have an actual link but to override the behavior to navigate within the SPA. So if you click it, the navigation will be within the SPA but if you ctrl+click it, the browser takes over and opens the underlying link in a new page.
Typical issue is when a developer forgets to make it an actual link, but only inclides the SPA navigation.
Comment by lemoncucumber 6 days ago
Comment by nesk_ 6 days ago
Comment by Baljhin 5 days ago
damn!- was sitting in the Fx queue for TEN years: https://bugzilla.mozilla.org/show_bug.cgi?id=380637
Comment by jeffalyanak 6 days ago
That way trusted sites that used it responsibly could be given permission, but it could not be used by any random site.
Comment by binkHN 6 days ago
Comment by igor47 6 days ago
I do like when websites use ctrl-k -- it means nothing to my plug-in so websites always get it, plus it helps with key binding discovery.
Comment by kule 6 days ago
Comment by qup 6 days ago
Comment by joquarky 6 days ago
Comment by varenc 6 days ago
Comment by mrandish 6 days ago
// ==UserScript==
// @name Key Passthrough 2.0
// @description Ensure specific hotkeys reach userscripts on greedy sites. Ctrl+Shift+/ toggles aggressive mode for sites that swallow keys entirely.
// @run-at document-start
// @include *
// @exclude http://192.168.*
// Always-enabled key codes: 27=Esc, 116=F5 (Refresh), 166=Browser_Back, 167=Browser_Fwd, 191=/
// Other keycodes to consider: 8=BS, 9=Tab, 16/160/161=Shift, 17/162/163=Ctrl, 18=Alt, 37=LArrow, 39=RArrow, 46=Delete, 112=F1
// ==/UserScript==
(function () {
'use strict';
// Keys to passthrough in normal mode.
// Esc, Ctrl, / (191) and Browser nav (166/167) are the core cases.
// F1/F5 included if you have AHK remaps on those.
// Esc included to prevent sites trapping it in overlays.
const PASSTHROUGH_KEYS = new Set([27, 116, 166, 167, 191]);
// Aggressive mode toggle hotkey: Ctrl+Shift+/
const AGGRESSIVE_TOGGLE_CODE = 191;
const REFIRE_FLAG = '_kp_refire';
let aggressiveMode = sessionStorage.getItem('kp_aggressive') === '1';
const logPrefix = '[KeyPassthrough]';
const announce = (msg) => console.log(`${logPrefix} ${msg}`);
if (aggressiveMode) announce('Aggressive mode ON (persisted from earlier in session)');
// --- Normal mode ---
// We're first in the capture chain at document-start.
// For passthrough keys, do nothing — just let the event propagate naturally.
// The site's listeners follow ours in the chain, so we've already won the race.
// --- Aggressive mode ---
// For sites that still swallow keys via stopImmediatePropagation in an
// inline <script> that races document-start: block the site's listeners,
// then re-dispatch a clone after the current call stack clears so our
// userscripts get a clean second shot.
function refire(e) {
// Build a plain init object from the original event
const init = {
key: e.key,
code: e.code,
keyCode: e.keyCode,
which: e.which,
charCode: e.charCode,
ctrlKey: e.ctrlKey,
shiftKey: e.shiftKey,
altKey: e.altKey,
metaKey: e.metaKey,
repeat: e.repeat,
bubbles: true,
cancelable: true,
composed: true,
};
const clone = new KeyboardEvent(e.type, init);
clone[REFIRE_FLAG] = true;
// After current capture/bubble cycle fully completes
setTimeout(() => document.dispatchEvent(clone), 0);
}
function handleKey(e) {
// Ignore our own re-dispatched events
if (e[REFIRE_FLAG]) return;
// Aggressive mode toggle: Ctrl+Shift+/
if (e.ctrlKey && e.shiftKey && e.keyCode === AGGRESSIVE_TOGGLE_CODE) {
aggressiveMode = !aggressiveMode;
sessionStorage.setItem('kp_aggressive', aggressiveMode ? '1' : '0');
announce(`Aggressive mode ${aggressiveMode ? 'ON' : 'OFF'}`);
e.stopImmediatePropagation();
return;
}
if (!PASSTHROUGH_KEYS.has(e.keyCode)) return;
if (aggressiveMode) {
// Block the site from seeing this key, then re-dispatch for our scripts
e.stopImmediatePropagation();
refire(e);
}
// Normal mode: do nothing, let event propagate naturally
}
document.addEventListener('keydown', handleKey, true);
document.addEventListener('keyup', handleKey, true);
})();Comment by merelysounds 6 days ago
> Open the about:config page in Firefox
> Search for "pushstate"
> Double-click "browser.history.allowPushState"
source: https://superuser.com/a/1688290
Comment by pfg_ 6 days ago
Comment by fluoridation 6 days ago
Comment by HappMacDonald 6 days ago
Comment by int0x29 6 days ago
Comment by chmod775 6 days ago
Comment by hansvm 6 days ago
Comment by mrandish 6 days ago
But the TFA is about a related issue with a similar symptom, hijacking (or disabling) the back button in Chrome browser. This also hasn't been an issue in Firefox in recent memory (kind of shocked to learn it still was until now in Chrome). However, I did have a problem in recent years in Firefox with sites hijacking the Browser_Back keycode and/or hotkey (keycode 166 or Alt+Left Arrow) but I solved it with a small UserScript I posted elsewhere in this thread.
I rarely click the back arrow icon on the interface since I have a three-finger tap on my touchpad assigned to send the Browser_Back keycode when the active window is Firefox. Being a keycode, this can be intercepted by site JS. While sites intercepting Browser_Back (keycode 166) is rare, some video players use the arrow keys to skip forward/back and Alt+Arrow to skip more. Since Firefox uses Alt+Left Arrow as the back hotkey, this can be an issue. I fixed it with a UserScript that prevents sites from blocking certain keycodes. Note: you can also change all Firefox's hotkeys by going to "about:keyboard".
Comment by ohnoesjmr 6 days ago
Comment by mrandish 6 days ago
As for my small UserScript, it has nothing to do with browser history state. It simply forces web site JS to share certain key strokes with my browser, add-ons and scripts instead of swallowing them (and it's easy to include/exclude any site or page).
Comment by SquareWheel 6 days ago
Comment by HappMacDonald 6 days ago
Comment by joquarky 6 days ago
Comment by SquareWheel 6 days ago
Comment by DangitBobby 6 days ago
Comment by firefoxd 7 days ago
If you are wondering how it works. You get a link from LinkedIn, it's from an email or just a post someone shared. You click on it, the URL loads, and you read the post. When you click the back button, you aren't taken back to wherever you came from. Instead, your LinkedIn feed loads.
How did it happen? When you landed on the first link, the URL is replaced with the homepage first (location.replace(...) doesn't change the browser history). Then the browser history state is pushed to the original link. So it seems like you landed on the home page first then you clicked on a link. When you click the back button, you are taken back to the homepage where your feed entices you to stay longer on LinkedIn.
Comment by giorgioz 7 days ago
Comment by DaiPlusPlus 6 days ago
[1] At least, I hope it's a bug.
Comment by _cadp 6 days ago
Comment by embedding-shape 6 days ago
Comment by 100721 6 days ago
Comment by embedding-shape 6 days ago
Comment by CDRdude 6 days ago
Comment by embedding-shape 6 days ago
Anyways, the end result has been I don't use reddit at all on the phone, so kind of ended up being good for me anyways.
Comment by CDRdude 6 days ago
Comment by hacker161 6 days ago
Comment by embedding-shape 6 days ago
On my phone? Yes, absolutely, impossible to hit the links correctly even if I zoom in. Both old reddit and HN is "Fully functional" on desktop, agree, but far cry from "fully functional" on my arguably tiny iPhone.
Comment by nemomarx 6 days ago
Comment by pesus 6 days ago
Comment by alienbaby 6 days ago
Comment by notatoad 6 days ago
it's dead, per official comment from reddit.
Comment by Ohmec 6 days ago
Comment by mrandish 6 days ago
You and I are very different Reddit users. I don't think I've even seen r/all for at least a decade. I exclusively view Reddit via the old.reddit.com URL in desktop mode with the Reddit Enhancement Suite add-on + uBO + a custom CSS theme. I'm automatically redirected to my 'Subscribed' page showing only the dozen or so niche subreddits I care about, none of which have more than 100k subscribers (most are under 25k). It's glorious... like a time machine to before Reddit enshittified itself and spammers, astro-turfers, shills and influencers took over.
Comment by Pay08 6 days ago
Comment by radicality 6 days ago
Safari iOS: Be on a page, tap hold a link, click Open in new tab, go to new tab. The Back button should be grayed out and isn’t, and clicking it closes the tab. (???)
Chrome iOS: Be on a page, tap hold a link, click Open in new tab, go to new tab. Back button correctly grayed out as the tab has nowhere to go back to.
Comment by creaturemachine 6 days ago
Comment by Bombthecat 6 days ago
Comment by jeffbee 6 days ago
Comment by kube-system 6 days ago
The issue is hardly isolated to news outlets. It's endemic to the web.
Comment by LorenPechtel 6 days ago
Look what happened with Netflix. They actually got it right, a reasonable price for a bunch of stuff which would end up appropriated based on demand (they needed to have the disk to rent.) And how you have a bunch of players trying to compete in the space, each with it's exclusive content to try to make you choose them.
And look what's happened with Google's "news". It's more and more and more clickbait. I used to think the answer was a small charge per article, run through some aggregator that tracked payment. But these days we see things designed to get you to open the page, not to actually provide value. Or look at the problems Amazon has had with it's Kindle Unlimited stuff--books designed to game the metrics, groups engaging in read each other's books behavior etc.
Comment by kevin_thibedeau 6 days ago
Comment by tim333 6 days ago
Comment by cli 7 days ago
Comment by TeMPOraL 7 days ago
Comment by J_Shelby_J 6 days ago
Comment by myrion 7 days ago
Comment by moritzwarhier 6 days ago
Just speculating, I can't imagine a reason why they'd implement this especially for Safari.
Other than A/B-testing or trash code that coincidentally doesn't work in all mobile browsers.
Maybe they use the same AI that generates their fictious relationship stories to add these dark patterns to their code base :D
Comment by fluidcruft 6 days ago
Comment by moritzwarhier 6 days ago
Comment by ChocolateGod 6 days ago
Comment by SilasX 6 days ago
Comment by hobofan 6 days ago
Comment by venusenvy47 6 days ago
Comment by Barbing 6 days ago
New spam policy for navigate-away blocking, hope that's Google's next article.
Comment by Barbing 6 days ago
Comment by venusenvy47 5 days ago
Comment by Barbing 5 days ago
Comment by venusenvy47 6 days ago
Comment by dspillett 6 days ago
I've taken to opening anything in a new tab. Closing the tab is my new back button. In an idea world I shouldn't have to, of course, but we live in a world full of disks implementing dark patterns so not an ideal one. Opening in a new tab also helps me apply a “do I really care enough to give this reading time?” filter as my browsers are set to not give new tabs focus - if I've not actually looked at that tab after a little time it gets closed without me giving it any attention at all.
Specifically regarding LinkedIn and their family of dark patterns, I possibly should log in and update my status after the recent buy-out. I've not been there since updating my profile after the last change of corporate overlords ~9 years ago. Or I might just log in and close my profile entirely…
Comment by bluGill 6 days ago
Comment by docmars 6 days ago
Comment by sidewndr46 6 days ago
Comment by dspillett 6 days ago
The only problem is that this would break some things like certain SSO systems, so you would have to implement a white-list to allow shared state, and the UX for that would be abused to nag users to whitelist everything. Most people would just click “OK” by default like they do with everything else, and those of us with more sense would have a new reason to be irritated by incessant nagging.
Comment by troupo 6 days ago
In Safari if you open a new tab, don't navigate anywhere, and click back, the tab closes and takes you back to the originating page. I've gottent so used to it, I now miss it in any other browser
Comment by znort_ 6 days ago
this is the way.
Comment by cortesoft 6 days ago
Comment by Baljhin 5 days ago
Here's the setup I use:
[1] install this userscript, keep the default `include` i.e. 'every link": https://greasyfork.org/scripts/12367-open-links-in-new-tab; add to the `exclude` section the sites from [2].
[2] install this one and turn OFF the default: https://greasyfork.org/scripts/4416-open-links-in-current-ta...; add any sites you want to stay in the same tab to the `include` section (e.g. see [0]). Depending on how you browse, this will be a small list.
You can couple this with a tab-memory addon: example-- set [1]-Tabs to 'sleep' after a certain time; that way they're not using resources but still available later.
AND if you decide you're not gonna read those tabs anyway, just manually close them with having to activate them.
Comment by dspillett 5 days ago
Comment by RajT88 6 days ago
Comment by dspillett 5 days ago
Comment by bertil 6 days ago
Comment by dspillett 6 days ago
Though I'm guessing it would work in the cases being discussed in this article & thread: when you are navigating into a site (such as linkedin) from another, rather than following internal links.
Comment by abustamam 6 days ago
Thanks for explaining how they do it BTW! I didn't really think about it. I just knew it was shitty.
Comment by globular-toast 6 days ago
Comment by SunshineTheCat 6 days ago
The option I chose was "profile data" because I wanted to get my whole work history/projects/etc. for a new resume.
The export took several hours.
When I finally downloaded it, it included my name, Email, short description, and my Email address...
Comment by integralid 6 days ago
Comment by adithyassekhar 6 days ago
God I hope you are being funny. Why else would anyone install this crap?
Comment by input_sh 6 days ago
Comment by NetMageSCW 6 days ago
Comment by Baljhin 5 days ago
I've never seen any ATS that required Linkedin for login, but even having it as an option I've always thought of as weird.
Then again, I have see many an ATS that include Facebook and other slop sites, so welcome to another layer of jobhunting madness.
Comment by jarek83 6 days ago
Comment by ChrisMarshallNY 6 days ago
Assume the way that universal links work, is that the site main page is loaded, and some hash is supplied, indicating the page to navigate to from there. That's annoying, but perfectly valid, and may be necessary for sites that establish some kind of context baseline from their landing page.
Comment by bastawhiz 6 days ago
Comment by ChrisMarshallNY 6 days ago
It’s like reading an eBook in a reader. You always use the reader to interpret, format, and present the data.
It kind of sticks a spike into the old “each page is a document” model.
Comment by bastawhiz 6 days ago
Comment by ChrisMarshallNY 6 days ago
I remember when JavaScript became a big Web site driver. The arguments against using it to fetch and build content usually included broken back button functionality.
I don’t think a lot of folks really paid much attention to it, though.
Comment by Simulacra 6 days ago
Comment by 01284a7e 6 days ago
Comment by bertil 6 days ago
Comment by zozbot234 7 days ago
Comment by Rygian 7 days ago
Comment by zozbot234 7 days ago
Comment by vitro 7 days ago
Comment by nkrisc 6 days ago
Comment by Spare_account 6 days ago
It doesn't solve the problem with Instagram links, which in my experience do the following:
1) Open a new browser tab, with no history. 2) Close the original tab, so I can't easily get back to where I was.
Comment by zozbot234 6 days ago
Comment by jdwithit 6 days ago
Comment by marak830 7 days ago
Comment by TeMPOraL 7 days ago
Comment by zozbot234 7 days ago
Comment by TeMPOraL 6 days ago
Comment by neya 7 days ago
Comment by zozbot234 7 days ago
That's not a fix the user can implement themselves. Holding down the back button is comparatively trivial.
Comment by lxgr 6 days ago
Comment by zozbot234 6 days ago
Comment by lxgr 6 days ago
Clicking "back", noticing that the site broke it, moving the mouse and long-pressing "back" (I normally navigate with a mouse thumb button or a trackpad gesture) is much more annoying than my browser just preventing this from happening in the first place.
Comment by miki123211 7 days ago
One conception is "take me back to the previous screen I was on", one is "take me one level up the hierarchy." They're often but not always the same.
Mac Finder is a perfect example of a program correctly implementing the two. If you're deep in some folder and then press cmd+win+l to go to ~/Downloads, cmd+up will get you to ~/, but cmd+[ will get you back to where you were before, even if this was deep in some network drive, nowhere near ~.
I feel like mobile OSes lean towards "one level up" as the default behavior, while traditional desktop OSes lean more towards tracking your exact path and letting you go back.
Comment by TeMPOraL 7 days ago
Browsers actually used to have hierarchical navigation support, with buttons and all, back in the age of dinosaurs - all one had to do is to set up some meta tags in HTML head section to tell which URL is "prev"/"next"/"up". Alas, this has proven too difficult for web developers, who eventually even forgot web was meant for documents at all, and at some point browsers just hid/removed those buttons since no one was using them anyway.
The "Back" remains, and as 'Arainach wrote, it's only one concept and it's not, and never has been "up one level in the hierarchy".
EDIT:
The accepted/expected standard way for "take me up one level in hierarchy" on the web is for the page itself to display the hierarchy e.g. as breadcrumbs. The standard way to go to top level of the page is through a clickable logo of the page/brand. Neither of those need, or should, involve changing behavior of browser controls.
Comment by Arainach 7 days ago
In web browsers, there is only one concept.
There is no concept of "up one level in the heirarchy". If you want that make your own button in your website.
Comment by blooalien 6 days ago
https://lifehacker.com/how-to-move-up-one-url-level-in-chrom... *shrug*
Comment by hrimfaxi 6 days ago
This statement makes no sense to non-tech people. Most people don't think of sites hierarchically, at least not from a url path perspective.
Comment by Arainach 6 days ago
Going from an image to a root domain is not a hierarchy and as a pathological data hoarder who has downloaded a lot of images from a lot of sites I don't understand why I'd ever want that feature. It's wild that that's their first example use case on the article.
Similarly, going from page N of results to page 1 isn't "up a level in heirarchy".
Comment by christoph 6 days ago
*Edit - I left this in the wrong place, those extensions behave slightly differently.
Comment by sznio 6 days ago
Comment by Baljhin 5 days ago
I miss that feature. And that era.
Comment by thn-gap 7 days ago
Who expects this behavior? It doesn't make sense. You just want to go back where you were. Most file browsers I've used wanting to implement going up a level in hierarchy, have an arrow pointing up.
Comment by ButlerianJihad 6 days ago
For example, the Bacula documentation is still online, as a prime example of this: https://www.bacula.org/9.6.x-manuals/en/main/Getting_Started...
Comment by bfivyvysj 7 days ago
Comment by neya 6 days ago
Comment by eviks 6 days ago
Comment by matthewkayin 6 days ago
Comment by mzd348 6 days ago
Comment by al_borland 7 days ago
Comment by lamasery 7 days ago
Comment by PhageGenerator 7 days ago
Comment by TeMPOraL 7 days ago
Thanks. I never imagined this is a thing, it's an useful addition to my mental model of software components, to explain why back button on web behaves in weird ways for some apps.
But it sure does sound like a dumb pattern on the web.
Comment by notpushkin 6 days ago
Comment by boomlinde 6 days ago
Comment by al_borland 6 days ago
They should have their feet held to the fire on this.
Comment by boomlinde 6 days ago
I mention it not to excuse Microsoft's sins, but to the contrary to point out that malicious intent as a criteria isn't such a good idea after all, when there are such obvious cases of incompetence and malice being practically indistinguishable.
Comment by UntappedShelf21 6 days ago
Comment by sixothree 7 days ago
Comment by quantum_magpie 6 days ago
Comment by 542458 7 days ago
Comment by surround 7 days ago
Comment by dataflow 7 days ago
I'm reading the opposite: "If you're currently using any script or technique that inserts or replaces deceptive or manipulative pages into a user's browser history that [...]"
Comment by j16sdiz 7 days ago
Comment by SuperNinKenDo 7 days ago
Comment by Tepix 7 days ago
Comment by SuperNinKenDo 6 days ago
Comment by NetMageSCW 6 days ago
Comment by SuperNinKenDo 5 days ago
Comment by AndrewDucker 7 days ago
Comment by notpushkin 6 days ago
Comment by Kab1r 7 days ago
Comment by SuperNinKenDo 6 days ago
Comment by jbonatakis 6 days ago
Bold coming from the company who gives me the most confusing “Open in app” prompts that are designed to confuse you and get you to use their app rather than the web
https://mjtsai.com/blog/2024/03/29/those-obnoxious-sign-in-w...
Comment by bob1029 7 days ago
https://en.wikipedia.org/wiki/Post/Redirect/Get
Not strictly about hijacking back navigation but it can make experience less bumpy if you've got form submissions in the middle of the path.
Comment by karim79 7 days ago
Comment by bob1029 7 days ago
Comment by koen_hendriks 7 days ago
Comment by lxgr 6 days ago
Comment by vashchylau 6 days ago
Which has a long overdue problem of "Tap Back again to exit" type hijacks.
Or feed-based apps (hi Reddit, TikTok, Instagram) refreshing your timeline in hopes you reconsider exiting and keep doomscrolling.
One can only hope…
Comment by butokai 6 days ago
Comment by tgtweak 6 days ago
Comment by bityard 6 days ago
My issue with back-button hijacking isn't even spam/ads (I use an ad-blocker so I don't see those), but sites that do a "are you sure you want to leave? You haven't even subscribed to our newsletter yet?!"
Comment by NoGravitas 6 days ago
Comment by phkahler 6 days ago
No, You SPA should have it's own back button within the app. My browser back button should get me out of there no matter what.
Comment by creatonez 6 days ago
Comment by inetknght 6 days ago
Comment by bevr1337 6 days ago
Comment by SoftTalker 6 days ago
Comment by Sayrus 6 days ago
Comment by gwbas1c 6 days ago
(At least on the Chromium browsers that I've tested it with)
1: It fails silently if the user hasn't interacted with the page. (IE, the user needs to "do something" other than scroll, like click or type.) This generally stops most SPAM.
2: The browser detects loops / repeated prompting and has a checkbox to get out of the loop.
---
It was a little jarring the first time I used that API and tested my code with it; but I appreciate the protections. I've come across far too many "salesman putting their foot in the door" usage of it.
Comment by wat10000 6 days ago
Comment by tripflag 6 days ago
Comment by wat10000 6 days ago
Comment by Sayrus 6 days ago
Browser storage is cheap, but it is not guaranteed to be durable.
Comment by wat10000 6 days ago
Comment by _fat_santa 6 days ago
I would argue there is a place for this in web-apps. For example I have a SaaS app and I employ this on any form pages where the user has already started to enter information in.
I have considered form persistence so in the event a user goes back to a previous page, realizes it's a mistake and goes forward again, their form state from the previous state is persisted.
But I would like to ask, what would users prefer the behavior be on a form page like this?
Comment by lexicality 6 days ago
That's very different to sites like tomshardware that pops up a "hey why don't you check out this extra slop you didn't ask for" when you try to navigate away
Comment by encom 6 days ago
Pre-empting the web-mail comment: I know. I don't care.
Comment by ffsm8 7 days ago
Comment by sam1r 6 days ago
Comment by bryanhogan 6 days ago
I revently built an app with SvelteKit + Capacitor and had to implement the stack-based navigation one expects from a phone app myself.
Comment by nailer 5 days ago
Comment by ffsm8 5 days ago
Comment by nailer 5 days ago
Comment by andreareina 7 days ago
I feel like anything loaded from a third party domain shouldn't be allowed to fiddle with the history stack.
Comment by kvdveer 7 days ago
Comment by lmm 7 days ago
It will become harder for advertisers to deny responsibility for ads that violate their stated policies if they have to submit the ads ahead of time. Also site operators will need a certain level of technical competence to do this.
Comment by miki123211 7 days ago
Alternatively, they might require you to set up a subdomain with a cname alias pointing to them (or a common CDN), negating any security benefits of such a practice.
Comment by thepasch 6 days ago
Sounds like legal precedent waiting to be set. “Run our code so that it looks like your code, acts like your code, and has all the same access as your code” seems like it should be a slam dunk if said code ends up doing a Very Bad Thing to your visitors.
But of course that’s assuming common sense, and the law’s relationship with that isn’t always particularly apparent.
Comment by ImPostingOnHN 6 days ago
Comment by Ma8ee 7 days ago
Comment by zelphirkalt 6 days ago
Comment by latexr 6 days ago
Comment by friendzis 7 days ago
Comment by least 7 days ago
This feels like a reasonable counter-measure.
Comment by hnlmorg 7 days ago
SPAs, for example, require so many hacks to work correctly that I often wonder to myself if they’re not really just a colossal mistake that the industry is too blinded to accept.
Comment by arcfour 7 days ago
Comment by hnlmorg 6 days ago
Comment by arcfour 6 days ago
Comment by hnlmorg 6 days ago
We constantly see people’s PII leaked on the internet, accounts hacked and money stolen, due to piss poor safeguards in the industry. And that’s without touching on the intentional malpractice of user tracking.
And yes, this is a different issue, but it’s another symptom of the same problem. Tech businesses don’t give a shit, and developers make excuses about how it’s not life or death. Except our bad choices do still negatively affect people’s lives even if we try to convince ourselves it doesn’t.
Comment by boomskats 7 days ago
Comment by TeMPOraL 7 days ago
One that I hate the most is that they first reimplement tabular display with a soup of divs, then because this is slow as a dog, they implement virtualized display, which means they now need to reimplement scrolling, and because this obviously breaks CTRL+F, they end up piling endless hacks to fix that - assuming they bother at all.
The result is a page that struggles to display 100 rows of data. Contrast that with regular HTML, where you can shove 10 000 rows into a table, fully styled, without noticeable performance drop. A "classical" webpage can show couple megabytes worth of data and still be faster and more responsive than typical SPA.
Comment by boomskats 6 days ago
For your example, the point of that div soup is that enables behaviours like row/column drag&drop reordering, inline data editing, realtime data syncing and streaming updates, etc. - there is no way to implement that kind of user experience with just html tables.
There's also huge benefit to being able to depend on clientside state. Especially if you want your apps to scale while keeping infra costs minimal.
I get the frustrations you're talking about, but almost all of them are side effects of solutions to very real UX problems that couldn't be solved in any other way.
And to be clear, I'm not saying that people building SPAs when all they needed was a page showing 10,000 rows of static data isn't a problem. It's just a people problem, not an SPA problem.
Comment by hnlmorg 6 days ago
Except they had been solved in other ways and the problem was people insisted on using web technologies to emulate those other technologies even when web technologies didn’t support the same primitives. And they chose that path because it was cheaper than using the correct technologies from the outset. And thus a thousand hacks were invented because it’s cheaper than doing things properly.
Then along comes Electron, React Native and so on and so forth. And our hacks continue to proliferate, memory usage be damned.
Comment by friendzis 6 days ago
No, otherwise they would not need all those hacks. Web stack makes it cheap (fast and easy) to build an MVP, but since the very primitives required to fully implement requirements are not even there, they end up implementing tons of ugly hacks held by duck tape. All because they thought they could iterate fast and cheap.
It's the same story with teams picking any highly dynamic language for an MVP and then implementing half-baked typing on top of it when the project gets out of MVP stage. Otherwise the bug reproduction rate outpaces fixing rate.
Comment by yoz-y 6 days ago
I prefer the capabilities of native frameworks but I prefer the web box model.
Sizing stuff is native frameworks is nice until it isn’t.
Comment by hnlmorg 6 days ago
But I will admit I’ve focused more on desktop than mobile app development. And the thing about sizing stuff is it’s a much easier problem for desktop than mobile apps, which are full screen and you have a multitude of screen sizes and orientations.
Comment by phkahler 6 days ago
Any other way? Just build a web app with emscripten. You can do anything.
For a while GTK had an HTML5 backend so you could build whole GUI apps for web, but I think it got dropped because nobody used it.
Comment by friendzis 6 days ago
This is the whole concept of the SPA - make a page behave like multiple pages. The premise itself requires breaking absolutely everything assuming that content is static.
> There's also huge benefit to being able to depend on clientside state. Especially if you want your apps to scale while keeping infra costs minimal.
Um... I'm old enough to remember the initial release of node, where the value proposition was that since you cannot trust client data anyway and have to implement thorough checking both client and server side, why not implement that once.
> I get the frustrations you're talking about, but almost all of them are side effects of solutions to very real UX problems that couldn't be solved in any other way.
Let me introduce you to our lord and savior native app
Comment by riskable 6 days ago
If you don't let web developers manage history/state like this, we'd be going back to the inefficient world of, "every forward/back movement loads a whole page." (With lots of unnecessary round trip messages between the client and server while the user waits for everything to load).
Basically, the ability to manage history is a user-centric feature. It makes the experience better for them.
Comment by teo_zero 6 days ago
Yes. And that should be the default behavior: browser buttons should take you through the browser's history. If you keep a in-app state and want the user to navigate through it, you should provide in-app buttons.
Nobody complains that the browser's close button quits the browser instead of the app it's showing, or that the computer's power button shuts down the whole OS and not only the program in the foreground.
Users must be educated. If they have learned that left means "back" and right means "forward", that a star (sometimes a heart) means "remember this for me", and that an underlined checkmark means "download", then understanding the concept of encapsulation shouldn't be too much for them.
Comment by least 6 days ago
The Back and Forward buttons on a web browser is the navigation for the web. If you click a link on a static html page it will create a new entry. If you click back, it'll take you back. If you press forward, You will navigate forward.
We should not be creating a secondary set of controls that does the same thing. This is bad UX, bad design, and bad for an accessible web.
> Nobody complains that the browser's close button quits the browser instead of the app it's showing, or that the computer's power button shuts down the whole OS and not only the program in the foreground.
It does close the app it's showing because we have tabs. If you close a tab, it'll close the app that it's showing. If you close the browser, which is made up of many tabs, it closes all of the tabs. Before tabs, if you closed a window, the web page you were on would close as well. It does what is reasonably expected.
If on your web application you have a 'link' to another 'page' where it shows a change in the view, then you'd expect you would be able to press back to go back to what you were just looking at. SPAs that DON'T do that are the ones that are doing a disservice to the user and reasonable navigation expectations.
> Users must be educated. If they have learned that left means "back" and right means "forward", that a star (sometimes a heart) means "remember this for me", and that an underlined checkmark means "download", then understanding the concept of encapsulation shouldn't be too much for them.
They should not have to be 'educated' here. The mental model of using the back and forward buttons to navigate within a webpage is totally fine.
Comment by TeMPOraL 7 days ago
Can you unpack this please? AFAIK history stack is not preserved in the URL, therefore it cannot be preserved in a bookmark or a shared link.
Comment by QuantumNomad_ 6 days ago
https://developer.mozilla.org/en-US/docs/Web/API/History/pus...
> The new history entry's URL. Note that the browser won't attempt to load this URL after a call to pushState(), but it may attempt to load the URL later, for instance, after the user restarts the browser.
Comment by least 6 days ago
This can be as simple as having a single checkbox with a checked/unchecked state.
when you load the webpage, the javascript can pull in the url parameters with URLSearchParams (https://developer.mozilla.org/en-US/docs/Web/API/URLSearchPa...). If the url parameter you set is set to 'on' then the checkbox, which is by default unchecked, can be set to on.
You have your checkbox:
<input type="checkbox" id="check">
And then you have your javascript: const check = document.getElementById('check');
// get state of checkbox from URL parameter
check.checked = new URLSearchParams(location.search).get('state') === 'on';
// add event listener to call history api to alter the URL state.
check.onchange = () => { history.replaceState(null, '', check.checked ? '?state=on' : '?state=off'); };
The history.replaceState() replaces the URL in your history with the one including the URL parameter, so if a user were to bookmark it, it would store that and reload it when they revisit the webpage.If I used history.pushState(), each time I clicked on the checkbox, a new item would be added to the stack. for a checkbox this is almost certainly a bad idea because your browser history is going to be polluted pretty quickly if you happen to click it multiple times.
pushState can be useful when it matches the user expectations, though, like if it is an SPA and the user clicks on an internal link to another section of the site, they'd expect to be able to go back to the previous page, even though we're still on the same actual html page.
So you would not be preserving the entire history stack. You can sort of do this by encoding state changes into another url parameter, but the behavior isn't entirely consistent between browsers. It also does require, as far as I know, an explicit action from the user for it to actually affect their navigation. So a website couldn't just add 1000 entries to the user's history on load without some explicit interaction on the web page.
Once the user interacts, though, it does seem like it opens up a lot of opportunity to abuse it, intentionally or not. You can asynchronously push thousands of entries into the browser history without blocking interactivity of the site. you can even continue to push state to the URL from other inputs while doing so.
Comment by optionalsquid 7 days ago
Comment by lxgr 6 days ago
That behavior is expected in exactly one case (assuming slides, not the whole presentation, are modeled as a page each): If I navigated to that specific slide from the overview.
In any other scenario, this behavior amounts to breaking my back button, and I'll probably never visit the site again if I have that choice.
Comment by arcfour 7 days ago
Comment by optionalsquid 6 days ago
Comment by arcfour 6 days ago
Comment by dspillett 6 days ago
Unfortunately this would break some libraries for SPA management that people sometimes load from CDNs (external, or under their control but not obviously & unambiguously 1st-party by hostname) instead of the main app/page location. You could argue that this is bad design IMO, and I'd agree, but it is common design so enforcing such a limit will cause enough uproar to not be worth any browser's hassle.
I do like that they follow up this warning with “We encourage site owners to thoroughly review …” - too many site/app owners moan that they don't have control over what their dependencies do as if loading someone else's code absolves them from responsibility for what it does. Making it clear from the outset that this is the site's problem, not the user's, or something that the UA is doing wrong, or the indexer is judging unfairly, is worth the extra wordage.
Comment by ori_b 6 days ago
Comment by ekjhgkejhgk 6 days ago
Comment by RobotToaster 7 days ago
Comment by pas 6 days ago
Comment by lxgr 6 days ago
Comment by bell-cot 6 days ago
Comment by apatheticonion 7 days ago
For instance,
- if you want to do statistics tracking (how many hits your site gets and user journeys)
- You have a widget/iframe system that needs to teardown when the SPA page is navigated away
- etc
The browser does not have a;
globalThis.history.addEventListener('navigate')
So you must monkey patch the history API. It's impractical from a distribution standpoint to embed this code in the page bundle as it's often managed externally and has its own release schedule.Comment by jampekka 7 days ago
https://developer.mozilla.org/en-US/docs/Web/API/Navigation/...
Comment by apatheticonion 6 days ago
Comment by friendzis 7 days ago
You can do all of that server-side and much more reliably at that. The only reason to do any of this tracking client-side is advertisers trusting fake number go up more than sales numbers.
Comment by CableNinja 7 days ago
Comment by throwaway81523 7 days ago
It seems pretty stupid. Instead of expanding the SEO policy bureaucracy to address a situation where a spammer hijacks the back button, the browser should have been designed in the first place to never allow that hijacking to happen. Second best approach is modify it now. While they're at it, they should also make it impossible to hijack the mode one.... oh yes, Google itself does that.
Comment by spankalee 7 days ago
Comment by jack1243star 7 days ago
Comment by venussnatch 7 days ago
It lets persistent content (videos) or connections (chat) persist while emulating a pagenated browsing experience.
When it's done right you don't notice it at all.
Comment by mrob 6 days ago
Comment by jack1243star 7 days ago
Well, if I wanted to return to the parent screen in a single page application, I'd click on the back button in the app itself. No need to prevent me from back tracking in the exact order of my browsing should I need it.
I especially hate YouTube's implementation, I can never know the true state on my older PC during whatever it's trying to accomplish, often playing audio from a previous video when I backspace out. I resort to opening every link in a new tab.
Comment by least 7 days ago
The spec kind of goes into it, but aside from the whole SPAs needing to behave like individual static documents, the big thing is that it's a place to store state. Some of this can be preserved through form actions and anchor tags but some cannot.
Let's say you are on an ecommerce website. It has a page for a shirt you're interested in. That shirt has different variations - color, size, sleeve length, etc.
If you use input elements and a form action, you can save the state that way, and the server redirects the user to the same page but with additional form attributes in the url. You now have a link to that specific variation for you to copy and send to your friend.
Would anyone really ever do that? probably not. More than likely there'd just be an add to cart button. This is serviceable but it's not necessarily great UX.
With the History API you can replace the url with one that will embed the state of the shirt so that when you link it to your friend it is exactly the one you want. Or if you bookmark it to come back to later you can. Or you can bookmark multiple variations without having to interact with the server at all.
Similarly on that web page, you have an image gallery for the shirt. Without History API, maybe You click on a thumbnail and it opens a preview which is a round trip to the server and a hard reload. Then you click next. same thing. new image. then again. and again. and each time you are adding a new item to the history stack. that might be fine or even preferred, but not always! If I want to get back to my shirt, I now have to navigate back several pages because each image has been added to the stack.
If you use the History API, you can add a new url to the stack when you open the image viewer. then as you navigate it, it updates it to point to the specific image, which gives the user the ability to link to that specific image in the gallery. when you're done. If you want to go back you only have to press back once because we weren't polluting the stack with history state with each image change.
Comment by jack1243star 7 days ago
I guess what feels wrong to me is the implicitness of this feature, I'm not sure whether clicking on something is going to add to history or not (until the back button breaks, then I really know).
Comment by pwdisswordfishq 6 days ago
Comment by mlmonkey 7 days ago
Comment by josephcsible 7 days ago
Comment by not2b 7 days ago
Comment by bonesss 7 days ago
The real answer is to have desktop applications that work like applications (buttons do what feels right), and websites that work like websites.
SPA, is a page application. Pages aren’t applications, applications aren’t pages. AutoCAD is an app, the Robotech Encyclopedia is content.
Comment by lxgr 6 days ago
If the browser only allows adding at most one history item per click, I should be able to go back to where I entered a given site with at most that many back button clicks.
At a first glance, this doesn't seem crazy hard to implement? I'm probably missing some edge cases, though.
Comment by mock-possum 7 days ago
Comment by JoshTriplett 7 days ago
That's not perfect, and it could still be abused, but it might prevent the most common abuses.
EDIT: apparently Chrome tried that and it wasn't sufficient: https://news.ycombinator.com/item?id=47761349
Comment by phkahler 6 days ago
Just implement an additional back button on the SPA. This is actually not confusing and is done in some places. Navigation buttons within an SPA are common enough.
Comment by filcuk 7 days ago
Comment by _ink_ 7 days ago
Comment by totalwebtool 6 days ago
Comment by Asmod4n 7 days ago
Comment by asqueella 6 days ago
Comment by voidUpdate 7 days ago
Comment by slurpyb 7 days ago
Or so I have been told.
Comment by estetlinus 7 days ago
Comment by parasti 7 days ago
Comment by sheept 7 days ago
Comment by rbits 6 days ago
Comment by lxgr 6 days ago
Comment by SCdF 6 days ago
Comment by mixedbit 6 days ago
Comment by Havoc 6 days ago
So jarring when websites replace core functionality with their own broken crap because they think they’re special.
Some also seem to hijack right click menu now
Comment by Mate4 6 days ago
Comment by gonzalohm 6 days ago
Comment by taco_emoji 6 days ago
Comment by rat_on_the_run 6 days ago
Comment by pornel 6 days ago
Browsers only struggle to run heavy JS frameworks that wrap every line in a dozens of spans with dozens of handlers and mutate it all on every line scrolled.
Comment by ivanjermakov 6 days ago
Comment by MrMember 6 days ago
Comment by arielcostas 6 days ago
Comment by lebuin 6 days ago
Comment by david_allison 6 days ago
Comment by amadeuspagel 6 days ago
Comment by Havoc 6 days ago
Who decreed that page navigation is in scope and search navigation is outside?
Comment by kristopolous 7 days ago
Would have fixed this. Too late now
Comment by hysan 7 days ago
Comment by onli 7 days ago
Comment by sublinear 7 days ago
Hah. In my time working with marketing teams this is highly unlikely to happen. They're allergic to code and they far outnumber everyone else in this space. Their best practices become the standard for everyone else that's uninitiated.
What they will probably do is change that vanity URL showing up on the SERP to point to a landing page that meets the requirements (only if the referer is google). This page will have the link the user wants. It will be dressed up to be as irresistible as possible. This will become the new best practice in the docs for all SEO-related tools. Hell, even google themselves might eventually put that in their docs.
In other words, the user must now click twice to find the page with the back button hijacking. Even sweeter is that the unfettered back button wouldn't have left their domain anyway.
This just sounds like another layer of yet more frustration. Contrary to popular belief, the user will put up with a lot of additional friction if they think they're going somewhere good. This is just an extra click. Most users probably won't even notice the change. If anything there will be propaganda aimed at aspiring web devs and power users telling them to get mad at google for "requiring" landing pages getting in the way of the content (like what happened to amp pages).
Comment by mancerayder 6 days ago
Comment by musicale 7 days ago
Comment by endgame 7 days ago
Comment by globular-toast 6 days ago
I want to be able to say "Don't let any script have access to these keyboard keys". But apparently that can't be done even with extensions. I've strongly considered forking Firefox to do this, but I know how much effort that would be to maintain.
How hard would it be to write scripts that expose an interface that the user can bind to keys themselves, if they wish to?
Comment by kiddico 7 days ago
Comment by consp 7 days ago
Comment by TeMPOraL 7 days ago
Comment by zelphirkalt 6 days ago
Comment by asimovDev 7 days ago
Comment by unkl_ 7 days ago
Comment by lxgr 6 days ago
Comment by justin_dash 6 days ago
Comment by lxgr 6 days ago
Comment by justin_dash 6 days ago
Comment by LoganDark 7 days ago
Comment by fsckboy 6 days ago
the "home row" is where your fingers start out if you know how to type by touch, and it come from the days of typewriters instead of keyboards.
on a QWERTY keyboard, the home row is ASDFGHJKL; with your fingers resting on ASDF and JKL;
when they teach you to touch type, they say "put your fingers on the home row" and "home is where your fingers always return to."
Comment by zelphirkalt 6 days ago
Comment by turtleyacht 7 days ago
Comment by chongli 7 days ago
Comment by pottertheotter 7 days ago
Comment by ryandrake 7 days ago
Comment by arjie 7 days ago
Both in terms of comprehensiveness and in terms of functionality.
Comment by jl6 7 days ago
Comment by skydhash 6 days ago
Comment by sicjsciwnciwj 5 days ago
Nothing to do with the technology, everything to do with the people. When you say you want to “go back to the good old days” what you’re actually saying is “I want fewer people to have access to the internet”.
Comment by socalgal2 6 days ago
Comment by krater23 6 days ago
Comment by socalgal2 6 days ago
Comment by chongli 6 days ago
Comment by phkahler 6 days ago
Comment by collabs 7 days ago
Comment by yjftsjthsd-h 7 days ago
Comment by hnlmorg 7 days ago
And the ironic thing is you are chatting on a forum that could have easily been built in 1995.
Comment by bonesss 7 days ago
If you put 2026 media players (with modern bandwidth), on the manually curated small-editorial web of ‘95 it’d be amazing.
We used to have desktop apps, these SPA JS monstrosities are the result of MS missing the web then MS missing mobile. Instead of a desktop monopoly where ActiveX could pop up (providing better app experiences in many cases than one would think), we have cross-platform electron monstrosities and fat react apps that suck, are slow, and omfgbbq do they break. And suck. And eat up resources. Copy and paste breaks, scrolling breaks, nav gets hijacked, dark mode overridden.
Netflix, Spotify, MS have apps I see breaking on the regular on prime mainstream hardware. My modern gaming windows laptop, extra juicy GPU for all the LLM and local kubernetes admin, chokes on windows rendering. Windows isn’t just regressing, their entire stack is actively rotting, and all behind fancy web buttons.
Old man yelling at cloud, but: geeeez boys, I want to go back.
Comment by robotswantdata 7 days ago
Now it’s owned by corporates and everyone is using bloated JS frameworks.
Comment by roygbiv2 7 days ago
Comment by wmf 7 days ago
Comment by chongli 6 days ago
Comment by dylan604 6 days ago
Comment by dylan604 6 days ago
Comment by peterspath 7 days ago
Comment by themafia 7 days ago
I'm still not over the loss of Gopher.
Comment by AuthAuth 7 days ago
Comment by atoav 7 days ago
Comment by raincole 7 days ago
Comment by hnlmorg 7 days ago
People started browsing on a plethora of devices from the Dreamcast to PDAs. And then Steve Jobs came a long and doubled down on the shift in accessibility. His stance on Flash was probably the only thing I agreed with him on too.
Comment by miki123211 7 days ago
If you wanted to accomplish anything more substantial than reading static content (like an email client that beeps when you get an important email, or a chat app that shows you new messages as they come in), you needed to install a desktop app. That required you to be on the same OS that the app developer supported (goodbye Linux on the desktop), as well as to trust the dev a lot more.
We seem to have collectively forgotten the trauma of freeware. Operating an installer in the mid 2000s was much like walking through a minefield; one wrong move, and your computer was infected with crapware that kept changing your home page and search engine. It wasn't just shady apps, mainstream software (I definitely remember uTorrent and Skype doing this) was also guilty. Even updates weren't safe.
Comment by chongli 6 days ago
The web as an application platform has always been a half-baked, second class, inferior experience for the user. It has always been about developer convenience at the expense of the user. No thank you!
Comment by encom 6 days ago
Also, up until Windows Vista, Microsoft thought that making every account on their OS root by default was an amazing idea, further exacerbating the problem you describe, which I don't deny existed. Software distribution on Windows is still a shit-show today, but I guess there's too much momentum to move to a Linux-style repository. The Microsoft Store is a piss poor attempt.
Comment by miki123211 7 days ago
On one side, we have Apple giving us great APIs but telling us how to use them. On the other, we have W3C being extremely conservative with what they expose, exactly because of things like this.
Comment by pwdisswordfishq 6 days ago
Comment by phoronixrly 7 days ago
Comment by xnx 7 days ago
Comment by zelphirkalt 6 days ago
Comment by Permik 6 days ago
Most likely needs manual quirk code overlays for sites, but it's totally a solvable problem.
Comment by surcap526 7 days ago
Comment by oliwarner 7 days ago
Number of times I've looked for something on my phone, gone through to a product page on Amazon but then have had to back out multiple times to get back to the search listing. Sometimes it's previously viewed products, sometimes it's "just" the Amazon home page. It should be one-and-done.
eBay too. I'm sure there are others.
Comment by sam1r 6 days ago
Almost unrelated, but.. I wonder ..if there was an APM intern[1] behind this, or maybe this was this project. Because, this, would have been an excellent one!
[1] I had the fortune to be one myself in June 2012 for the Chrome Team.
Comment by radium3d 6 days ago
Comment by nixpulvis 6 days ago
Comment by the_gipsy 7 days ago
Excuse me??
Comment by snowwrestler 6 days ago
This sort of announcement just emphasizes the extent to which Google observes ALL your web browsing behavior, thanks primarily to their eyes inside Chrome browser.
You know those warnings when you install a browser extension, about all the things that extension will be able to see and do? Well so can Chrome itself…
Comment by beastman82 6 days ago
Comment by snowwrestler 6 days ago
Crawlers do not use the browser back button or browser history. So the only way Google could observe such problems is by observing live human browsing behavior.
Also, we know from exhibits in the U.S. DOJ trial that Google does use Chrome browsing behavior as a signal in search ranking. It’s not a hypothetical.
Comment by adrianmonk 6 days ago
Couldn't you instrument the crawler's browser engine to observe whether (while crawling) the page does any behaviors that would result in back button hijacking? No back buttons have to be clicked.
You just have to watch whether the mousetrap is set. Since you know how mousetraps work, you don't have to grab the cheese.
Comment by ImPostingOnHN 6 days ago
Comment by cachvico 6 days ago
I actually felt that this was a solved problem, so I'm surprised to see so many people still suffer getting stuck in redirect loops.
Comment by chakintosh 6 days ago
Comment by blacksoil 6 days ago
Comment by twism 7 days ago
Comment by itopaloglu83 7 days ago
Makes it impossible to browse around and long click to open on a new tab doesn’t solve the issue either.
Comment by kaelwd 7 days ago
Comment by rc_kas 7 days ago
Comment by concinds 7 days ago
It works perfectly on Chrome, if it was intentional they would have broken it on Chrome too.
As always you can count on Apple/Safari team to not give a shit, not try to fix it, not reach out to reddit to ask them to fix it, etc.
Comment by snowwrestler 6 days ago
Comment by KevinMS 6 days ago
Comment by vsgherzi 7 days ago
Comment by Nuzzerino 6 days ago
Comment by imiric 7 days ago
If by "user" you mean advertisers, sure you do. Everyone else is an asset to extract as much value from as possible. You actively corrupt their experience.
The fact these companies control the web and its major platforms is one of the greatest tragedies of the modern era.
Comment by SilentM68 6 days ago
Comment by davidczech 6 days ago
Comment by Aardwolf 6 days ago
Comment by chakintosh 6 days ago
Comment by mrob 6 days ago
Comment by eviks 6 days ago
What's the real reason?
Comment by nubinetwork 6 days ago
Comment by vladde 6 days ago
if i'm on page C and go back, page B will take me to page C again. i think this is more about techincal incompetence rather than malicious intent, but still annoying.
Comment by XCSme 6 days ago
One of the worst is TikTok, even as a developer, when someone sends me a TikTok link and I have to visit it, I get stuck in the browser (same with the app but I uninstalled it), and it feels almost device-breaking the way they trap you in.
Comment by saagarjha 6 days ago
Comment by gadders 6 days ago
Comment by transcriptase 7 days ago
I’ll believe that when YouTube gives me the ability to block certain channels versus “not interested” and “don’t recommend channel” buttons that do absolutely nothing close to what I want.
Or a thousand other things, but that one in particular has been top of mind recently.
Comment by PeterStuer 7 days ago
Comment by VileSquirrel 6 days ago
www.youtube.com###contents-container > .ytd-rich-shelf-renderer.style-scope
www.youtube.com###rich-shelf-header
www.youtube.com###content > .ytd-rich-section-renderer.style-scope
||www.youtube.com/shorts/$document
Alternatively on firefox you can use either the "unhook" extension (https://addons.mozilla.org/en-US/firefox/addon/youtube-recom...) or "enhancer for youtube" (https://addons.mozilla.org/en-US/firefox/addon/enhancer-for-...) extension (which has an option for this).
Comment by bot403 7 days ago
It's why I went to Kagi.
Comment by cnees 6 days ago
Comment by righthand 6 days ago
Comment by psidium 7 days ago
Comment by monegator 7 days ago
That would have severely rustled my jimmies
Comment by cientifico 6 days ago
So this coming from google... it's funny. Welcome, but funny.
Comment by youknownothing 6 days ago
Comment by wafflemaker 6 days ago
Sorry for every time I called Google the Satan and didn't add exception for the good people working there!
Comment by wbshaw 6 days ago
Comment by bartread 6 days ago
Comment by mikkom 7 days ago
Comment by LLLDP 6 days ago
Comment by seanalltogether 6 days ago
Comment by synack 7 days ago
Comment by tgsovlerkhgsel 7 days ago
Clicking the dismiss button on the cookie banner is not a reason to push a state that will show the user a screen full of ads when they try to leave. (Mentioning the cookie banner because AFAIK Chrome requires a "user gesture" before pushState works normally, https://groups.google.com/a/chromium.org/g/blink-dev/c/T8d4_...)
Comment by kro 7 days ago
These sites likely pushState on consent actions so it appears like any user interaction.
Comment by tgsovlerkhgsel 6 days ago
But detecting it on a technical level shouldn't be hard either. Visit the page, take a screenshot, have an AI identify the dismiss button on the cookie/newsletter popups, scroll a bit, click something that looks inactive, check if the URL changes, trigger the back action. Once a suspicious site is identified, put it in the queue for manual review.
Comment by kro 6 days ago
Still, requires user interaction, on any element, once. So the crawler needs to identify and click most likely the consent/reject button. Which may not even trigger for Googlebot.
So they likely will rely on reports or maybe even Chrome field data.
Comment by tgsovlerkhgsel 6 days ago
Comment by omcnoe 7 days ago
Comment by halfmatthalfcat 6 days ago
Comment by nottorp 7 days ago
Comment by dominicrose 7 days ago
Comment by nottorp 6 days ago
So isn't that also back hijacking?
Comment by red_admiral 6 days ago
Comment by nottorp 6 days ago
For your use case all you need is the page to get notified so it can save. Remember that on Android your onSaveInstanceState gets called and you have to save your state or lose it.
Comment by worksonmine 6 days ago
Comment by charcircuit 7 days ago
Comment by domenicd 7 days ago
We weren't really able to figure out any technical solution beyond this. It would rely on some sort of classification of clicks as leading to "real" same-document navigations or not.
This can be done reasonably well as long as you're in a cooperative relationship with the website. For example, if you're trying to classify whether a click should emit single-page navigation performance entries for web performance measurement. (See [2].) In such a case, if the browser can get to (say) 99% accuracy by default with good heuristics and provide site owners with guidance on how to annotate or tweak their code for the remaining 1%, you're in good shape.
But if you're in an adversarial relationship with the website, i.e. it's some malicious spammer trying to hijack the back button, then the malicious site will just always go down the 1% path that slips through the browser's heuristics. And you can try playing whack-a-mole with certain code patterns, but it just never ends, and isn't a great use of engineering resources, and is likely to start degrading the experience of well-behaved sites by accident.
So, policy-based solutions make sense to me here.
[1]: "real history stack": by this I mean the user-visible one that is traversed by the browser's back button UI. This is distinct from the programmer-visible one in `navigation.entries()`, traversed by `navigation.back()` or `history.back()`. The browser's back button is explicitly allowed to skip over programmer-visible entries. https://html.spec.whatwg.org/multipage/speculative-loading.h...
[2]: https://developer.chrome.com/docs/web-platform/soft-navigati...
Comment by magicalhippo 6 days ago
Classify history API, canvas etc etc as "webapp" APIs, and have them show a similar dialog to the webcam dialog.
Then I can just click no, and the scripts on the page can't mess around.
Yes Google Maps is great. No, my favorite news site doesn't need that level of access to my browser or machine, it just needs to show some images and text.
Comment by themafia 7 days ago
Comment by charcircuit 6 days ago
Comment by SuperNinKenDo 7 days ago
Comment by bot403 7 days ago
Not life ruining but just enough to be annoying. Just like their website.
Comment by josephcsible 7 days ago
Comment by charcircuit 6 days ago
If this was about intentional abuse the article would not have had to ask all site operators in existence to audit their entire website for this. Even if some random library does this without your knowledge can violate this.
Comment by Yizahi 6 days ago
Comment by NooneAtAll3 7 days ago
I'm tired of apps that intercept home button to ask "are you sure?" - home button is home button, return me to the main phone screen
also, ads at the bottom of the screen, so that if you miss home button you open a website
Comment by G_o_D 7 days ago
Comment by TehCorwiz 6 days ago
Comment by ux266478 6 days ago
There certainly is a satisfaction that would come from a shit site like linkedin or youtube being reduced to a gibbering mess of exceptions. Scripting is a privilege, and it's a nice one, but abuse of it shouldn't be tolerated. I really don't see a usecase for boiling it down to a binary of allowing the whole gamut of complex programmability web browsers expose, or allowing none of it. I'd rather just draw a line and say "programs that use these features are acceptable, programs that use these ones aren't".
Comment by alpaca128 6 days ago
Comment by benj111 6 days ago
Comment by a13o 6 days ago
Comment by bschwindHN 7 days ago
It's like walking into some room and having to swat away a bunch of cobwebs before doing whatever it is you want to do (read some text, basically).
Comment by not_your_vase 7 days ago
But thinking of this at this moment, this could be a good use for a locally ran LLM, to get rid of all this crap dynamically. I wonder why Firefox didn't use this as a usecase when they bolted AI on top of Firefox. Maybe it is time for me to check what api FF has for this
Comment by Terr_ 7 days ago
It would finally put some teeth behind the myth of the informed consumer, and there would be gloriously absurd court-battles from corporations. ("This is our freedom of speech and commerce, it's essential, if people don't like what we're doing they can vote with their wallets... NOT LIKE THAT STOP USING SPEECH AND COMMERCE!")
Comment by internet101010 7 days ago
Comment by 93po 7 days ago
Comment by pwg 7 days ago
zero cookie banners
zero surveys popping up
zero ads to be closed
Just the text of the page with no other distractions in the way.
Comment by carlosjobim 7 days ago
Comment by taco_emoji 6 days ago
Comment by globalnode 7 days ago
Comment by CWwdcdk7h 6 days ago
Comment by felixding 6 days ago
Comment by skrebbel 6 days ago
Comment by lxgr 6 days ago
Comment by neeeeeeal 6 days ago
Comment by jonahs197 6 days ago
Comment by mrheosuper 6 days ago
Comment by arewethereyeta 6 days ago
Comment by gwbas1c 6 days ago
Edit: I'm not sure what kind of friction is needed, either an expensive review process (that most application developers would complain about but everyone else would roll their eyes) or a reputation system. Maybe someone else can think of a better approach than me?
Comment by TexanFeller 6 days ago
Comment by dylan604 6 days ago
Comment by shevy-java 6 days ago
We need to go back to an independent and competent research group designing standards. Right now Google pwns and controls the whole stack (well, not really ALL of it 1:1, but it has a huge influence on everything via the de-facto chrome monopoly).
Remember how Google took out ublock origin. They also lied about this aka "not safe standards" - in reality they don't WANT people to block ads.
Comment by edg5000 6 days ago
Addition: People underestimate Google's influence. It's easy to forget they de-facto control Firefox, leaving only Apple and Google in control of the Web. Scary, but looking away won't help either. The Americans have been consistently competent with technology since the advent of the transistor right after WW2. They're reaping the benefits of that still to this day. I say that as a European.
Comment by hmokiguess 6 days ago
It's like the other thread from before where LinkedIn scans for your extensions, the fact they can do that without prompting for permission from the user is baffling
Comment by htk 6 days ago
Comment by nullc 6 days ago
oh wait.. that won't happen: google is the biggest offender, using that technique to surveil browsing activity.
Comment by phkahler 6 days ago
Comment by sidewndr46 6 days ago
Comment by kartik_malik 6 days ago
Comment by kstenerud 7 days ago
Comment by incognito124 7 days ago
Comment by Animats 7 days ago
Comment by cik 7 days ago
Comment by tgsovlerkhgsel 7 days ago
Comment by ladberg 7 days ago
Comment by renewiltord 7 days ago
But I am also willing to pay for valuable content an exorbitant amount if it is valuable enough. For instance, for absolutely critical information I might pay 0.79€ a month.
Comment by tgsovlerkhgsel 6 days ago
But a paywall is a rather useless page, so it shouldn't be shown in search results. Normally, serving Google one page (e.g. a full article) and showing users something else (e.g. a paywall) would be grounds to ban that site forever, but Google built a special exemption for paywalls.
Showing search results that the user can't actually use is user hostile. It's essentially an ad disguised as a search result, with the problem that those ads displace other results that I might actually be able to read.
Of course, if the policy was to not index paywalled content, we might have avoided the paywallization of the Internet. Somehow, decades ago, when the Internet was smaller and there were fewer eyeballs, high quality content could successfully get monetized with non-tracking ads.
Now we have invasive ads that try to profile you, ads that are full of scams because quality control has gone out the window, and yet, somehow, everything needs to be behind a paywall...
Comment by purushpsm147 6 days ago
Comment by Arthur00 6 days ago
Comment by Serhii-Set 6 days ago
Comment by andrewmcwatters 7 days ago
Comment by urbandw311er 6 days ago
The company that hijacked an open source mobile OS and turned it into a closed source profit machine.
The company that hijacked the web so “accelerated mobile pages” could effect a walled garden.
The company that hijacked a browser and turned it into an anti-privacy tracking system.
It’s like R. Kelly giving a keynote on safeguarding minors.
EDIT: …but, yes, to be clear, I loathe the hijacking of back buttons too. Just a shame I have to read this sanctimonious shit from a company with such a terrible track record on trust.
Comment by dnnddidiej 7 days ago
JS doesn't let you change back button behaviour.
Q. But what about SPA?
A. Draw your own app-level back button top left of page.
Another solution: make it a permisson.
Comment by layer8 7 days ago
Let the browser do the browsery things. Don’t make SPAs suck even more than they already do.
Comment by dnnddidiej 6 days ago
Comment by layer8 6 days ago
Comment by Hamuko 7 days ago
This is the worst idea I’ve heard all day.
Comment by dnnddidiej 5 days ago
Comment by kaelwd 7 days ago
Comment by sublinear 7 days ago