Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 10.04.2014, 19:03
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от Octane
я только начинал верить в IE
Ахаха
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #42 (permalink)  
Старый 11.04.2014, 00:09
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Octane
придется фиксить так
Не помню с какого осла, но майкрософт заявила, что не хочет отличатся от остальных браузеров по юзер-агенту. Так что теперь это одна из "фич" новых IE
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #43 (permalink)  
Старый 11.04.2014, 00:31
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Короче тут обсуждали https://twitter.com/DmitryKorobkin/s...81153034596354
Если фиксить через new NOP, то возникает проблема: Object.create(null) instanceof Object → true, а так быть не должно, поэтому последний вариант:
//IE9-11 Object.create bug fix
(function () {
	var object = Object.create({});
	object[0] = null;
	return object.hasOwnProperty(0); //→ false in IE9-11
}()) || new function () {
	var create = Object.create;
	Object.create = function (prototype, properties) {
		//Object.defineProperties fixes a bug
		if (properties) {
			return create(prototype, properties);
		}
		//If Object.create works via new NOP, then
		//Object.create(null) instanceof Object → true,
		//but it's wrong.
		//https://twitter.com/WebReflection/status/454342010288078848
		if (prototype === null) {
			return create(null, {
				"": {
					configurable: true,
					writable: true
				}
			});
		}
		function NOP() {}
		NOP.prototype = prototype;
		return new NOP;
	};
};
да, теперь для Object.create(null), метод Object.getOwnPropertyNames будет возвращать лишнее пустое свойство, но лучше варианта пока не придумал.

Последний раз редактировалось Octane, 11.04.2014 в 01:00.
Ответить с цитированием
  #44 (permalink)  
Старый 11.04.2014, 12:00
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

А не проще тогда уж поправить hasOwnProperty
//IE9-11 Object.create bug fix
(function () {
    var object = Object.create({});
    object[0] = null;
    return object.hasOwnProperty(0); //> false in IE9-11
}()) || new function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    Object.prototype.hasOwnProperty = function(prop) {
      // если числовое свойство ищем
      return +prop == prop ?
            Object.getOwnPropertyNames(this).indexOf(""+prop) != -1 :
            hasOwnProperty.apply(this, arguments);
    };
};
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #45 (permalink)  
Старый 11.04.2014, 12:19
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Тогда и getOwnPropertyDescriptor, и propertyIsEnumerable фиксить придется, может еще что-нибудь
Ответить с цитированием
  #46 (permalink)  
Старый 11.04.2014, 21:17
Аватар для Дзен-трансгуманист
√₋̅₁̅
Отправить личное сообщение для Дзен-трансгуманист Посмотреть профиль Найти все сообщения от Дзен-трансгуманист
 
Регистрация: 18.06.2012
Сообщений: 385

Баг интерфейса в FF28, замечен в винде:

Встроенный редактор JS иногда перестает исполнять код. Это бывает неочевидно, например, когда код чисто логический и не подразумевает каких-либо визуальных эффектов. Поэтому сопровождайте его хотя бы console.log, если ниче не логирует - лечится открыванием нового окна редактора.
__________________

Гейзенберг, возможно, читал этот тред.

Последний раз редактировалось Дзен-трансгуманист, 11.04.2014 в 21:25.
Ответить с цитированием
  #47 (permalink)  
Старый 11.04.2014, 23:32
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Дзен-трансгуманист, ты не сюда пости, а в баг-трекер мозиллы
__________________
kobezzza
code monkey
Ответить с цитированием
  #48 (permalink)  
Старый 12.04.2014, 00:05
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от kobezzza
Дзен-трансгуманист, ты не сюда пости, а в баг-трекер мозиллы
Дзен-трансгуманист, не слушай его. Тогда тема будет неактуальна
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #49 (permalink)  
Старый 12.04.2014, 03:09
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Octane
Тогда и getOwnPropertyDescriptor, и propertyIsEnumerable фиксить придется, может еще что-нибудь
Ок, тогда не нужно никаких NOPов, все делается просто:
//IE9-11 Object.create bug fix
(function () {
    var object = Object.create({});
    object[0] = null;
    return object.hasOwnProperty(0); //> false in IE9-11
}()) || new function () {
    var create = Object.create;
    Object.create = function (prototype, properties) {
        var isExecNum = properties && Object.getOwnPropertyNames(properties).indexOf("0") != -1;

        if (!isExecNum) {
            properties = properties || {};
            /**
             * Нужно добавить именно числовое свойство, иначе не будет работать
             * например такой вариант не работает:
             *   var o = Object.create({}, {"": {configurable: true}});
             *   delete o[""];
             *   o[0] = null;
             *   o.hasOwnProperty(0) // -> false
             * но если вместо пустой строки поставить число, то все работает хорошо
             */
            properties["0"] = {
                configurable: true
            };
        }

        var object = create.call(this, prototype, properties);

        if (!isExecNum) {
            delete object["0"];
            delete properties["0"];
        }
        return object;
    };
};
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 12.04.2014 в 04:19.
Ответить с цитированием
  #50 (permalink)  
Старый 12.04.2014, 10:56
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

О это хорошо, теперь фикс ничем не помешает. Я думаю, можно не выполнять никаких проверок, кроме наличия properties:
//IE9-11 Object.create bug fix
(function () {
	var object = Object.create({});
	object[0] = null;
	return object.hasOwnProperty(0); //→ false in IE9-11
}()) || new function () {
	var create = Object.create;
	Object.create = function (prototype, properties) {
		var object;
		if (properties) {
			//Object.defineProperties fixes a bug
			object = create(prototype, properties);
		}
		else {
			//numeric key fixes a bug,
			//it can be removed after,
			//unlike alphabetic key
			object = create(prototype, {
				"0": {
					configurable: true
				}
			});
			delete object[0];
		}
		return object;
	};
};

Последний раз редактировалось Octane, 12.04.2014 в 15:56.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт определения мобильных браузеров remkas Элементы интерфейса 0 25.10.2012 15:47
history браузеров d-kaktus Javascript под браузер 1 12.01.2012 00:31
Баги в форме добавления nemo Серверные языки и технологии 0 18.07.2010 13:35
Баги в сниппетах ответов Илья Кантор Сайт Javascript.ru 31 11.06.2009 17:58
feature request: FAQ hogart Сайт Javascript.ru 4 30.01.2009 11:53