重写window.alert后,如何获取被覆盖的原始alert提示文本?
解决重写window.alert后获取提示文本的问题
嘿,这个场景我之前也遇到过,其实核心点特别简单——你漏了alert函数本身的参数传递!
首先得明确:原生window.alert()的第一个参数就是要展示的提示文本,根本不需要通过this去拿。另外,记得一定要先缓存原生的alert方法,不然重写之后想再调用原生弹窗功能就麻烦了。
给你贴个完整的可用示例:
// 第一步:先缓存原生alert,这步必须在重写之前做! const originalAlert = window.alert; // 第二步:重写alert函数,接收提示文本参数 window.alert = function(message) { // 这里的message就是你要获取的提示文本 console.log('拿到的alert提示内容:', message); // 如果还想保留原生弹窗的功能,就调用缓存的原始方法 // 用call绑定window作为上下文,保证原生方法正常运行 originalAlert.call(window, message); };
你之前的代码拿不到文本,是因为自定义函数没定义参数,而且this指向window是完全正常的——毕竟alert是window的方法,调用时上下文本来就是window,但文本内容从来不是存在this里的,而是通过函数参数传递的呀!
要是你已经重写了alert但没缓存原生方法,赶紧把缓存步骤补到重写代码的前面,不然之后想恢复原生功能就难咯。
内容的提问来源于stack exchange,提问作者Itsik Mauyhas
相关产品推荐
相关产品推荐

