假设我们的脚本包含在网页中,之前的脚本(已经执行过)执行了此操作:
String.prototype.split = function () {
return 'U MAD BRO?';
};
Run Code Online (Sandbox Code Playgroud)
因此,split字符串方法已被覆盖.
我们想使用这种方法,所以我们需要以某种方式恢复它.当然,我们可以定义自己的方法实现并使用它.但是,为了这个问题,我们只想说我们真的想恢复浏览器对该方法的实现.
因此,浏览器具有该split方法的实现(在本机代码中,我相信),并且String.prototype.split无论何时加载新的网页,该实现都被分配.
我们想要实施!我们想要它回来String.prototype.split.
现在,我已经提出了一个解决方案 - 它是一个黑客攻击,它似乎正在工作,但它可能有缺陷,我将不得不测试一下......所以,在此期间,你能想出一个解决方案吗?这个问题?
一般问题:当像Array这样的默认Javascript原型被修改,黑客攻击,更改并扭曲到无法使用时,有没有办法创建(或重新实现)原始的,未修改的原型的实例?
我的情况:我有一些代码在(可怕的,专有的,封闭源代码......)内容管理系统的"编辑"模式下失败,因为内容的"编辑"模式界面的javascript管理系统破坏了Array原型的绝对生活地狱.
我的代码将在CMS的非编辑模式下工作,但是,为了实现这一目标,它已经在"编辑"模式下进行了测试.可以测试原型是否已被修改.是否有可能重新实现默认的Array原型,所以我可以这样做:
var hasArrayBeenTrashed = // boolean based on https://stackoverflow.com/questions/574584/
var normalArray.prototype = // based on answer to this question
var myArray = !hasArrayBeenTrashed ? [] : new normalArray;
Run Code Online (Sandbox Code Playgroud) 假设一个网页是这样做的:
window.alert = console.info;
如何通过浏览器控制台恢复原始alert方法以恢复模态?
我尝试访问,window.prototype但它不存在。我还想知道这样的过程是否普遍存在(例如,是否String.*被网站删除/重新定义,或者网站是否制作了console.log = window.alert)。
我正在开发一个项目,注意到一位核心开发人员覆盖了alert()在他的 JS 中重写了方法。
是否可以在不询问/更改他的代码的情况下恢复它?
他做了类似的事情..
function alert() {
// his code
}
Run Code Online (Sandbox Code Playgroud)