Я хочу изменить настройки по умолчанию window.location setter и getter.Ошибка Javascript: циклическое значение __proto__
Следующий код успешно работает. Но эти коды являются только ограниченной рабочей областью.
var _window = window;
(function() {
window = {};
var window = {};
Object.defineProperty(window, 'location', {
get: function() { alert('called getter '); return _window.location; },
set: function() { alert('not in my house'); }
});
window.__proto__ = _window;
alert('window.location : '+ window.location);
}());
Когда я удалить блок,
var _window = window;
window = {};
var window = {};
Object.defineProperty(window, 'location', {
get: function() { alert('called getter '); return _window.location; },
set: function() { alert('not in my house'); }
});
window.__proto__ = _window;
alert('window.location : '+ window.location);
я встретил следующее сообщение об ошибке.
ERROR Error: cyclic __proto__ value
Я знаю, что не может переопределить неконфигурируемое свойство «location» в нормальной среде. Я изменил свойства привязки IDL для проверки этого кода в библиотеке webkit. Как я могу решить эту проблему?
У меня есть другой вопрос. Когда я бегу следующие коды, я встретил ту же самую ошибку. (Оао - Javascript ядро, Spidermonkey, nodejs)
var o1 = { p1: 1 };
var o2 = { p2: 2 };
o2.__proto__ = o1;
var o3 = { p3: 3 };
o3.__proto__ = o2;
o1.__proto__ = o3;
JavaScriptCore оболочки (JSC)
Exception: Error: cyclic __proto__ value
node.js (v0.10.25)
Error: Cyclic __proto__ value
Spidermonkey JavaScript-C24.2.0
1.js:7:0 TypeError: cyclic __proto__ value
Это связано? Спасибо ^^
Не манипулируйте '__proto__' –
Спасибо, что ответили на мой вопрос. Моя основная цель - обнаружить изменение window.location или ввести некоторые коды в сеттер. У вас есть идеи или методы? Object.observe и Object.watch еще не поддерживаются в среде webkit. Но я могу изменить объект DOM для настройки или замены. – guest
Ищите инъекцию javascript или посмотрите на источник AOP libs, как можно обернуть исходные объекты. –