Я хочу сериализовать узел DOM или даже целый window
в JSON.
Например:
>> serialize(document)
-> {
"URL": "http://stackoverflow.com/posts/2303713",
"body": {
"aLink": "",
"attributes": [
"getNamedItem": "function getNamedItem() { [native code] }",
...
],
...
"ownerDocument": "#" // recursive link here
},
...
}
JSON.stringify ()
JSON.stringify(window) // TypeError: Converting circular structure to JSON
Проблема в том, что JSON по умолчанию не поддерживает циклические ссылки.
var obj = {}
obj.me = obj
JSON.stringify(obj) // TypeError: Converting circular structure to JSON
window
и узлы DOM имеют много из них. window === window.window
как будет document.body.ownerDocument === document
.
Кроме того, JSON.stringify
не сериализует функции, так что это не то, что я ищу.
`dojox.json.ref.toJson()` can easily serialize object with circular references:
var obj = {}
obj.me = obj
dojox.json.ref.toJson(obj); // {"me":{"$ref":"#"}}
Хорошо, не правда ли?
dojox.json.ref.toJson(window) // Error: Can't serialize DOM nodes
Ну, не достаточно хорош для меня.
Почему?
Я пытаюсь создать таблицу совместимости DOM для разных браузеров. Например, Webkit поддерживает атрибут-заполнитель, а Opera - нет, IE 8 поддерживает localStorage
, IE 7 - нет, и т. Д.
Я не хочу делать тысячи тестов. Я хочу сделать общий способ для проверки их всех.
Обновление, июнь 2013
Я сделал прототип NV / dom-dom-dom.com .