我能否创建一个谷歌Chrome扩展程序来防止页面执行 alert()
?
我能否创建一个谷歌Chrome扩展程序来防止页面执行 alert()
?
正如@MrGlass所说,目前Chrome扩展程序运行在一个独立的环境中,限制了对真实window
对象的访问,并提供了一个仅适用于扩展程序的副本。
为了解决这个问题,我们可以直接向文档中注入一个脚本元素,这样就可以访问文档环境和真正的window
对象。
首先,让我们创建这个函数(我也添加了"confirm",因为一些确认框太烦人了):
var disablerFunction = function () {
window.alert = function alert(msg) { console.log('Hidden Alert ' + msg); };
window.confirm = function confirm(msg) {
console.log("Hidden Confirm " + msg);
return true; /*simulates user clicking yes*/
};
};
现在我们要做的是将该函数转换为文本脚本,并将其括在括号中(以避免与页面环境中实际变量可能发生的冲突):var disablerCode = "(" + disablerFunction.toString() + ")();";
最后,我们插入一个脚本元素,然后立即将其删除:
var disablerScriptElement = document.createElement('script');
disablerScriptElement.textContent = disablerCode;
document.documentElement.appendChild(disablerScriptElement);
disablerScriptElement.parentNode.removeChild(disablerScriptElement);
是的,你可以。alert()只是JavaScript中的一个方法,你可以通过以下方式重写它的功能。
window.alert = function alert(msg) {
console.log('Hidden Alert ' + msg);
};
记住,在manifest文件中通过run_at标识来运行content script,这样可以在文档开始时运行它。
我相信有一个扩展程序可以做到这一点。开发者把它命名为“Nice Alert”。 https://chrome.google.com/extensions/detail/ehnbelnegmgdnjaghgomaakjcmpcakhk
谢谢。那很有帮助。不过,我意识到我需要这样做才能让它正常工作。
location.href="javascript: window.alert = function(x) {console.log(x)};"
location.href="javascript: window.alert = function(x) {console.log(x)}; window.confirm = function(){return true;};";