其实整个问题。一种反猴子补丁。如果原始对象(对象,数组,函数,字符串等)及其原型已更改\ expand \ deleted?
我现在看到的唯一选择 - 它是动态创建框架 - 拉出他的原生物体 - 动态移除框架。也许可以通过帮助Web Workers完成相同的工作。但他们即> 9,其中没有类DOM,并且其本身与动态帧相同。
框架示例
delete Object.prototype.constructor;
delete Object;
console.log(window.__proto__.__proto__.__proto__.constructor); // undefined
// console.log(Object); // undefined
var frame = document.createElement('frame');
document.all[0].appendChild(frame);
var Object = frames[0].Object;
document.all[0].removeChild(frame);
console.log(Object);
这个理论问题。 例如,我们正在开发一个嵌入式库,并且无法知道它何时被调用,因此在使用本机浏览器调用它时,可以更改它。我们需要获得原始对象,即初始环境。
也许有其他方法可以解决?
提前致谢。
答案 0 :(得分:0)
在发布我的答案之前,我必须告诉你我不会说英语,所以请原谅我,我没有解决你的问题,但也许这对你有帮助。
我几周都在寻找如何获得toString
内置函数,即使它被重新定义并且没有找到任何东西(除了创建一个新框架,但这个解决方案对我不起作用,因为我是使用节点js / node webkit)。
我开始搜索窗口对象,找不到可配置的对象,这样任何人都无法重新定义它们,我发现了这个:
Object.getOwnPropertyDescriptor(window, "top");
//Object {value: Window, writable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(top.__proto__, "toString");
//Object {value: function, writable: true, enumerable: false, configurable: false}
因此,如果我访问top.__proto__.toString
总是获得真正的内置函数,因为它是不可配置的(到目前为止我找不到替换它的方法)。这对我在webkit客户端上工作,所以我必须继续搜索nodejs的解决方案。
顺便说一句,我删除了与你相同的对象构造函数,我在顶部找不到Object
,但我认为它必须存储在某个地方。我会继续搜索,如果我找到解决方案,我会编辑这篇文章。
我希望我有所帮助。