Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.06.2014, 10:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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+ уже такой вариант не канает...
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #2 (permalink)  
Старый 20.06.2014, 11:41
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Я нативность проверяю как

obj.constructor.toString()


У нативных объектов будет сообщение типа

function ...() {
    [native code]
}
__________________
kobezzza
code monkey
Ответить с цитированием
  #3 (permalink)  
Старый 20.06.2014, 12:15
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от kobezzza
У нативных объектов будет сообщение типа
ну это я в курсе... тока мне надо проверять нативность DOM объектов а не всех... например нужно сделать метод типа isNativeDOMObject() которому в аргумент передав простой объект получим false а вот если передадим элемент или то что относится к DOM что бы вернул true...
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 20.06.2014, 14:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

1. У меня почему-то дежавю.
2. А что ты подразумеваешь под DOM?
XMLHttpRequest например - это ведь не DOM, но и не часть языка. Также как URL и прочие браузерные объекты. Если язык от браузерых надстроек ещё отличить можно, то дальше без списков в хардкоде врядли получится пойти.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 20.06.2014, 14:50
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Aetae
У меня почему-то дежавю.
верно, есть тут кем-то созданное подобное, но там не то... там просто узнать элемент это или нет... А мне нужно немного другое.
Сообщение от Aetae
А что ты подразумеваешь под DOM?
Сложно сказать, все встроенные в браузер объекты кроме встроенных в движок JavaScript. Если объект является частью языка JavaScript значит оно мне не нужно.. Если объект является частью браузера... Значит оно мне нужно... примерно как-то так.

Сообщение от Aetae
XMLHttpRequest например - это ведь не DOM, но и не часть языка. Также как URL и прочие браузерные объекты. Если язык от браузерых надстроек ещё отличить можно, то дальше без списков в хардкоде врядли получится пойти.
Верно не DOM но зато не часть языка JS.. А значит он должен так же определяться встроенным в браузер..


Я конечно не совсем правильно выразился про то что мне нужны все native-DOM объекты... скорее правильно выразится так: Мне нужны все объекты являющиеся частью браузерных объектов а не частью объектов языка JavaScript... примерно так.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 20.06.2014, 15:05
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 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
Ответить с цитированием
  #7 (permalink)  
Старый 20.06.2014, 15:23
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Aetae
Експеримент в консольке FF:
Сообщение от Aetae
На верность результата не претендую, просто рандомно пойманная закономерность.)
вот именно что это работает тока для ФФ в хроме все выдает false
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 20.06.2014, 15:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

devote, ну мы же таки имеем дело с браузерными надстройками, очевидно для каждого браузера придётся подбирать свой способ. Конечно можно порыться в стандарте, может там указаны какие-нибудь чёткие критерии, но то уже не ко мне.)
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 20.06.2014, 17:08
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Aetae,
ну понятно что за счет костылей для каждого браузера может оно у нас и получится. Но я думаю что обойдусь... Но все равно спасибо за то что потратили время на мою проблему.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #10 (permalink)  
Старый 20.06.2014, 18:44
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Думаю, правильное название темы должно выглядеть так: "Как отличить host объекты от built-in объектов?"

похожая тема

Последний раз редактировалось Octane, 20.06.2014 в 18:49.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить порядковый номер элемента DOM ? dummer jQuery 7 17.01.2014 17:44
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Объект как свойство объекта Cooskon Общие вопросы Javascript 6 16.02.2010 21:41
Как узнать, что DOM сформирован dmeet AJAX и COMET 1 10.08.2009 17:09
Как определить id дочернего элемента DOM? Motonto Events/DOM/Window 1 09.04.2009 08:13