Using pushState? Make sure your links are fine
dev.tenfarms.com
dev.tenfarms.com
Or, more generally, you could request additional permissions from the browser; see the recent specifications for mouse capture and gamepad use.
For example (and not to call anyone out), there's this demo (warning: will fill your history): http://bodytag.org/rollstate/
Looking at its source, it uses real <a> tags for its pushState() links, but with href="#". If you click on "contact", then middle-click "about", a new tab will open to "/rollstate/contact" (which 404s, another pushState() no-no).
My site does this (by accident), and I eventually had to ask StackOverflow to find that Sammy.JS (my client-side router) was doing it.
(It's infuriating when I try to middle-click a run of interesting-looking questions and it "steals" the clicks.)
- basically everyone has JS enabled
- they were too hard to do
- IE6 went away
- you can make significantly better UX without them
- there is business value to usable apps
- there is no business value to catering to people who disable javascript
- the existence of things like Modernizer make it possible to assume that everyone has the fancy features you need.
> - you can make significantly better UX without them
This is the biggest place where you’re wrong, as the examples of right-clicking or middle-clicking a “div with JavaScript” plainly illustrate.
Now obviously complicated web apps can’t work 100% or sometimes even 10% without JavaScript, but when reasonably possible, using progressive enhancement & unobtrusive JS will increase your compatibility across UAs, search engines, and other agents, and will avoid cases where your site seems broken in some crucial way.
Not to mention users with accessibility needs will do much better interacting with your `<a>` tags than scripted `<div>`s. Have we forgotten about them again, already?
Edited to add: Biggest tips w.r.t. accessibility: (a) Spend an hour using a screenreader and no mouse — e.g. VoiceOver, which comes with your Mac and works just fine in Safari. (b) Using semantic tags & progressive enhancement means your code will make the most sense to the screenreader — e.g. you will be able to tab onto your button/link because you actually defined it as one — and it will be described fairly accurately. Your "clickable" <span> is plainly going to be trickier for a screenreader… (c) Read up on WAI-ARIA, which lets you define roles for certain elements (like "notification" or "button"). If you want to make your AJAX work well for those with accessibility needs, this becomes fairly important as it can also help you manage focus and direct user attention.
You say progressive enhancement helps you out in all these cases, but I just see opinion, and very little evidence. So all I have to offer you in rebuttal is the same - I believe the opposite.
I agree about accessibility. I frankly don't know what to do there. On the one hand, I hate the idea that I might be excluding somebody. On the other hand, I tend to implement things lazily, so if I'm never asked for a feature, I probably won't do it.
Nope; don't forget that scripts don't always load. Opera on Mint kills bloated scripts (a.k.a. jQuery). This usually results in a white page.
> - they were too hard to do
Perhaps lazy developers should reconsider their profession then.
> - IE6 went away
Browser versions are irrelevant.
> - you can make significantly better UX without them
An utter falsehood. Refer to my earlier experience with white pages.
> - there is business value to usable apps
There's no business value in casting a wider net? That's bewildering.
> - there is no business value to catering to people who disable javascript
It seems to me that you're only interested in turning a quick buck. That's disheartening.
> - the existence of things like Modernizer make it possible to assume that everyone has the fancy features you need.
Assumptions cast from half-baked feature tests aren't an absolute by any measure. "Everyone" is definitely misleading here.
For example, when I said "there is business value to usable apps", I actually didn't imply "there is no business value to casting a wider not". To say nothing of your "quick buck" comment.
It's dishonest to play tricks like this, so I would ask you to rewrite your comment as if your target audience was an intelligent human being looking for an intelligent discussion.
The rest of the post was simply a point-by-point dissection. None of your other points are valid. The only somewhat valid argument I hear against proper browser compatibility is "we don't have time", which is usually a self-inflicted wound.
Stable web pages that gracefully degrade are fully possible, even today. I wrote a unit test that degrades in IE 5 this week.
I hope the 0.02% of your users who benefited from that, are very happy.
Some reference: http://stackoverflow.com/questions/10660360/command-click-do...
For example, does your technique handle middle-clicks (clicking on the middle mouse button, which is equivalent to shift-clicking)?
rel="internal"
raised my eyebrows. Yes, it makes sense. But the `rel` attribute is not to be used lightly and values are not to be invented on a whim, because eventually the value can be defined for all sites, not just yours.Without thoroughly researching it, it looks like `rel=internal` is not standardized. That means you should not use it!
Instead, consider:
<a href="/page" data-push-state="push">Foo</a>
and jQuery('a[data-push-state=push]')
The data-* attributes are explicitly defined as open for your own invention and use.A lot more info about this is in the question, an the links from it, including history, Mozilla accessibility discussion, and code samples:
http://stackoverflow.com/questions/10660360/command-click-do...
Also, I'm using hashbangs if the browser doesn't support pushState (like IE).
And if you're visiting from a mobile browser, I don't do any of the pushState fanciness either.
No wonder so many gdamn sites get it wrong. Nothing infuriates me more than whichever lightbox implementation always sieves control of my ctrl+clicks and then doesn't allow me to view the picture in a larger size. Infuriating.