15

我可以创建一个谷歌浏览器扩展来阻止页面执行alert()吗?

4

3 回答 3

17

正如@MrGlass 所说,目前,Chrome 扩展程序在单独的环境中运行,限制对实际window对象的访问并提供仅对扩展程序有效的副本。

为了解决这个问题,我们可以将脚本元素直接注入到文档中。这样,您就可以访问文档的环境和真实window对象。

首先,让我们创建函数(我也添加了“确认”,因为有些确认让我非常恼火):

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);
于 2017-02-05T13:07:06.657 回答
16

是的,你可以,alert() 只是一个 JavaScript 方法,你可以通过做覆盖它的功能。

window.alert = function alert(msg) {
  console.log('Hidden Alert ' + msg);
};

只需记住通过 run_at 清单内容脚本修饰符在清单中的 document_start 处运行该内容脚本。

我相信有一个扩展可以做到这一点。开发人员将其命名为 Nice Alert。 https://chrome.google.com/extensions/detail/ehnbelnegmgdnjaghgomaakjcmpcakhk

于 2010-06-05T04:10:35.287 回答
-5

谢谢你。这有帮助。然而,我意识到我需要这样做才能让它工作

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;};";
于 2010-06-05T19:32:27.770 回答