20.06.2014, 10:52
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Как определить что объект принадлежит к разделу нативного DOM объекта
Вот и у меня назрел подобный вопрос... как определить что объект принадлежит к разделу нативного DOM объекта. Простыми словами не элемент а именно объект... например:
CSSStyleDeclaration - у него нет всяких nodeType и прочего но он является DOM-объектом и не имеет наследника Element или Node или пуще EventTarget. Ну и соответственно другие объекты подобного типа помимо Node-элементов.
Есть идеи? Я конечно найду решение, но может кто что знает уже или сталкивался с подобным вопросом?
В ИЕ до восьмой версии включительно, все просто, любой native-DOM-объект проверяя:
alert(CSSStyleDeclaration.prototype instanceof Object); // false в ИЕ8 и true везде кроме ИЕ8 и ниже
А вот с другими браузерами и ИЕ9+ уже такой вариант не канает...
|
|
20.06.2014, 11:41
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Я нативность проверяю как
obj.constructor.toString()
У нативных объектов будет сообщение типа
function ...() {
[native code]
}
|
|
20.06.2014, 12:15
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от kobezzza
|
У нативных объектов будет сообщение типа
|
ну это я в курсе... тока мне надо проверять нативность DOM объектов а не всех... например нужно сделать метод типа isNativeDOMObject() которому в аргумент передав простой объект получим false а вот если передадим элемент или то что относится к DOM что бы вернул true...
|
|
20.06.2014, 14:43
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,585
|
|
1. У меня почему-то дежавю.
2. А что ты подразумеваешь под DOM?
XMLHttpRequest например - это ведь не DOM, но и не часть языка. Также как URL и прочие браузерные объекты. Если язык от браузерых надстроек ещё отличить можно, то дальше без списков в хардкоде врядли получится пойти.
__________________
29375, 35
|
|
20.06.2014, 14:50
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Aetae
|
У меня почему-то дежавю.
|
верно, есть тут кем-то созданное подобное, но там не то... там просто узнать элемент это или нет... А мне нужно немного другое.
Сообщение от Aetae
|
А что ты подразумеваешь под DOM?
|
Сложно сказать, все встроенные в браузер объекты кроме встроенных в движок JavaScript. Если объект является частью языка JavaScript значит оно мне не нужно.. Если объект является частью браузера... Значит оно мне нужно... примерно как-то так.
Сообщение от Aetae
|
XMLHttpRequest например - это ведь не DOM, но и не часть языка. Также как URL и прочие браузерные объекты. Если язык от браузерых надстроек ещё отличить можно, то дальше без списков в хардкоде врядли получится пойти.
|
Верно не DOM но зато не часть языка JS.. А значит он должен так же определяться встроенным в браузер..
Я конечно не совсем правильно выразился про то что мне нужны все native-DOM объекты... скорее правильно выразится так: Мне нужны все объекты являющиеся частью браузерных объектов а не частью объектов языка JavaScript... примерно так.
|
|
20.06.2014, 15:05
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,585
|
|
Експеримент в консольке FF:
function isNativeDOMObject(obj){
if(obj.prototype) obj = obj.prototype;
if(obj.constructor) obj = obj.constructor;
try{
Function.prototype.toString.call(obj)
}catch(e){
return true
}
return false
}
alert([
'document.body', isNativeDOMObject(document.body),
'document', isNativeDOMObject(document),
'CSSStyleDeclaration', isNativeDOMObject(CSSStyleDeclaration),
'document.body.style', isNativeDOMObject(document.body.style),
'NaN', isNativeDOMObject(NaN),
'new String("abc")', isNativeDOMObject(new String("abc")),
'new XMLHttpRequest()', isNativeDOMObject(new XMLHttpRequest()),
'XMLHttpRequest', isNativeDOMObject(XMLHttpRequest),
'URL', isNativeDOMObject(URL)
].join('\n'))
На верность результата не претендую, просто рандомно пойманная закономерность.)
__________________
29375, 35
|
|
20.06.2014, 15:23
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Aetae
|
Експеримент в консольке FF:
|
Сообщение от Aetae
|
На верность результата не претендую, просто рандомно пойманная закономерность.)
|
вот именно что это работает тока для ФФ в хроме все выдает false
|
|
20.06.2014, 15:32
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,585
|
|
devote, ну мы же таки имеем дело с браузерными надстройками, очевидно для каждого браузера придётся подбирать свой способ. Конечно можно порыться в стандарте, может там указаны какие-нибудь чёткие критерии, но то уже не ко мне.)
__________________
29375, 35
|
|
20.06.2014, 17:08
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Aetae,
ну понятно что за счет костылей для каждого браузера может оно у нас и получится. Но я думаю что обойдусь... Но все равно спасибо за то что потратили время на мою проблему.
|
|
20.06.2014, 18:44
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Думаю, правильное название темы должно выглядеть так: "Как отличить host объекты от built-in объектов?"
похожая тема
Последний раз редактировалось Octane, 20.06.2014 в 18:49.
|
|
|
|