User:Catrope/Bizarre browser bugs

Opera does a couple of annoying brain-damaged things that makes web developers go crazy. If someone ever starts serial-killing Opera developers, here's why:

Newline handling
The representation of newlines varies over browsers. For instance, Firefox represents newlines as  (even on Windows), while IE represents them as. Both browsers seem to be tolerant when trying to insert text in the 'wrong' newline format, and automatically convert it. This means you can code JS quite nicely without having to worry about one browser saying a newline is one character while the other says it's two.

Since Opera is this schizophrenic browser torn between wanting to be a good browser and wanting to be like IE, it came up with the following compromise: when you grab the contents of a textarea using  or  , newlines are represented as   , i.e. as one character. However, when manipulating selections using  or   (Opera, in its schizophrenia, supports both the Gecko way and the IE way), newlines are treated as two characters (presumably  ). This means that the following snippet doesn't do what you expect in Opera: In Firefox, this would search for the string "foo" in the textarea and select it if found. It'll also work in IE if you replace the  assignment with something using a TextRange object. However, it won't work in Opera, because of the different newline representations: the selection will be off to the left by the number of newlines preceding the found occurrence of "foo".

To hack around this, you'd have to do  and then call. Of course, you only want to do this when you're sure you're on a broken version of Opera (to my knowledge, all current versions are broken, but they might fix it some day), so you need a function that tests for this brokenness, then conditionally replaces  with.

The code for this function can be found in this file in a function called.