Как определить что объект принадлежит к разделу нативного DOM объекта
Вот и у меня назрел подобный вопрос... как определить что объект принадлежит к разделу нативного DOM объекта. Простыми словами не элемент а именно объект... например:
CSSStyleDeclaration - у него нет всяких nodeType и прочего но он является DOM-объектом и не имеет наследника Element или Node или пуще EventTarget. Ну и соответственно другие объекты подобного типа помимо Node-элементов. Есть идеи? Я конечно найду решение, но может кто что знает уже или сталкивался с подобным вопросом? В ИЕ до восьмой версии включительно, все просто, любой native-DOM-объект проверяя: alert(CSSStyleDeclaration.prototype instanceof Object); // false в ИЕ8 и true везде кроме ИЕ8 и нижеА вот с другими браузерами и ИЕ9+ уже такой вариант не канает... |
Я нативность проверяю как
obj.constructor.toString() У нативных объектов будет сообщение типа function ...() { [native code] } |
Цитата:
|
1. У меня почему-то дежавю.
2. А что ты подразумеваешь под DOM? XMLHttpRequest например - это ведь не DOM, но и не часть языка. Также как URL и прочие браузерные объекты. Если язык от браузерых надстроек ещё отличить можно, то дальше без списков в хардкоде врядли получится пойти. |
Цитата:
Цитата:
Цитата:
Я конечно не совсем правильно выразился про то что мне нужны все native-DOM объекты... скорее правильно выразится так: Мне нужны все объекты являющиеся частью браузерных объектов а не частью объектов языка JavaScript... примерно так. |
Експеримент в консольке 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')) На верность результата не претендую, просто рандомно пойманная закономерность.) |
Цитата:
Цитата:
|
devote, ну мы же таки имеем дело с браузерными надстройками, очевидно для каждого браузера придётся подбирать свой способ. Конечно можно порыться в стандарте, может там указаны какие-нибудь чёткие критерии, но то уже не ко мне.)
|
Aetae,
ну понятно что за счет костылей для каждого браузера может оно у нас и получится. Но я думаю что обойдусь... Но все равно спасибо за то что потратили время на мою проблему. |
Думаю, правильное название темы должно выглядеть так: "Как отличить host объекты от built-in объектов?"
похожая тема |
Часовой пояс GMT +3, время: 11:48. |