Как определить что объект принадлежит к разделу нативного 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:37. |