Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Когда Opera маскируется под другой браузер, то просто меняет значение UserAgent, все остальное остается прежним.
А насчет правильного фикса, то вот пример того как это делаю я, без ущерба для окружающих. У Оперы есть проблема с методом splice когда второй параметр не указан, то опера ведет себя неверно. Вот фикс:
(function(){
var native = Array.prototype.splice;
if ([1,2,3,4,5].splice(3).length == 2)
Array.prototype.splice =
function(){
var params;
for (var i = 0; i < arguments.length; i++)
params.push(arguments);
if (params.length < 2)
params[1] = this.length;
return native.apply(this, params);
}
})();Как тут можно заметить, фикс не проверяет - является ли браузер Оперой или другим, он просто знает что у определнных браузеров есть такая проблема - проверяет есть ли у данного. Если да, делаем подмену, если нет - то ничего не меняем.
browser.js.
Выкрутасы Opera