覆盖chrome扩展程序中的javascript警报

时间:2017-04-16 06:48:54

标签: javascript google-chrome-extension

我正在尝试构建chrome扩展;这方面的经验很少。我跟着Insert code into the page context using a content script使用第一种方法将js代码注入页面。

我正在尝试在别人的代码上构建一个js框架,这个代码很大程度上依赖于突破我覆盖功能的警报,所以我只想让它们沉默一点 - 实际上,我宁愿通过消息进入console.log但我会在这个阶段拿走我能得到的东西。所以我试图按照JavaScript: Overriding alert()设置我的最终js文件(nogo.js)进行注入。

注入了nogo.js,但它似乎没有抑制警报的效果。可能是因为另一个html文件本身是由一个不同的js文件启动的,注入发生得太慢或无序?

的manifest.json

  "content_scripts": [
        {
          "matches": ["*://URL/*"],
          "js": ["myscript.js"],
          "run_at": "document_end",
          "all_frames": true
        },
        {
          "matches": ["*://URL/*"],
          "js": ["noalerts.js"],
          "run_at": "document_start",
          "all_frames": true
        }

      ],
       "web_accessible_resources": ["script.js","nogo.js"]

     }

myscript.js

var s = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.extension.getURL('script.js');
s.onload = function() {
    this.remove();
};
(document.head || document.documentElement).appendChild(s);

noalerts.js

var n = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
n.src = chrome.extension.getURL('nogo.js');
n.onload = function() {
    this.remove();
};
(document.head || document.documentElement).appendChild(n);

nogo.js

window.alert = null;

1 个答案:

答案 0 :(得分:2)

要使alert无效,只需粘贴线条以覆盖它:

var s = document.createElement('script');
s.innerHTML = "alert = function(){}"
document.body.appendChild(s);

该功能将与您的功能体重新声明。我在扩展程序中不得不做类似的事情。

通过类比,您可以使confirm功能说"是"每次:

var s = document.createElement('script');
s.innerHTML = "confirm= function(){return true;}"
document.body.appendChild(s);

这可以用于最简单的情况 ..例如,没有其他人在页面上做任何其他事情等。

注意:您可以通过在控制台中粘贴代码并尝试调用alert来尝试此方法。 通知2 :代码可以在您的内容脚本中执行,因为它在脚本和内容脚本之间共享的文档。