我正在尝试构建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;
答案 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 :代码可以在您的内容脚本中执行,因为它在脚本和内容脚本之间共享的文档。