Owy*_*wyn 5 javascript google-chrome function built-in
如果你改变这样的原生函数:
window.open= function (a,b,c)
{
alert(2);
}
Run Code Online (Sandbox Code Playgroud)
那么以后你可以
delete window.open
Run Code Online (Sandbox Code Playgroud)
它会恢复原来的功能,但是:
如果你改变这样的原型:
window.__proto__.open= function (a,b,c)
{
alert(3);
}
Run Code Online (Sandbox Code Playgroud)
然后delete不会做任何事情= \任何想法现在如何恢复它?
Rob*_*b W 10
当您更改window.open到别的东西,例如使用window.open = 'something else';,那么你就遮蔽了open从原型法;
// Looking up window.open (in the prototype chain)....
window.open; // Found, result == 'something else'
window.__proto__.open; // Not accessible any more (shadowed by previous line)
Run Code Online (Sandbox Code Playgroud)
在调用delete window.opendelete之后'something else',原始方法再次可见,因为它从未从原型链中消失.
但是,如果您open在原型上修改了方法,例如window.__proto__.open = bogus;,那么您就无法轻松恢复旧方法.因此,要再次获得"打开窗口"行为,您需要在替换之前保留对原始方法的引用,
var original_open = window.open;
window.__proto__.open = 'bogus';
// .... whatever ....
// Now restore it:
window.__proto__.open = original_open;
Run Code Online (Sandbox Code Playgroud)
或者从另一个借用它window,例如使用临时新框架:
var frame = document.createElement('iframe');
document.body.appendChild(frame);
window.__proto__.open = frame.contentWindow.open;
frame.parentNode.removeChild(frame);
Run Code Online (Sandbox Code Playgroud)
这整个想法很荒谬:你不应该打破内置方法.
| 归档时间: |
|
| 查看次数: |
1547 次 |
| 最近记录: |