为简化示例,我们可以说我有以下网页:
<html>
<input type="button" value="click me!" onclick="Confirmation()">
</html>
<script>
function Confirmation() {
if (window.confirm("Are you sure you want to proceed?")) {
alert("proceeded!");
}
}
</script>
我想做的是以某种方式注入我的chrome扩展名,该扩展名要么覆盖confirmation()函数,要么将其更改为以下内容:
<script>
function Confirmation() {
if (true) {
alert("proceeded!");
}
}
</script>
我该怎么实现?
这是与我合作的解决方案:
@ elegant-user的功能
var jsCodeInjection = '' + function Confirmation() {
if (true) {
alert("proceeded cs!");
}
} + '';
var script = document.createElement('script');
script.textContent = jsCodeInjection;
(document.body||document.documentElement).appendChild(script);
script.remove();
如果您想要一种更清洁的实施方式,则:
@Kaiido的引荐,涉及如何为更清洁的实现注入单独的.js文件:
Insert code into the page context using a content script
如果script元素具有多个功能,而您试图覆盖其中的一个或多个功能,那么您必须将所有功能复制到一个单独的js文件中,并调整您要调整的功能要调整。
答案 0 :(得分:1)
不需要,但您可以在内容脚本中尝试以下代码:
var jsCodeInjection = '' + function Confirmation() {
if (true) {
alert("proceeded cs!");
}
} + '';
var script = document.createElement('script');
script.textContent = jsCodeInjection;
(document.body||document.documentElement).appendChild(script);
script.remove();
答案 1 :(得分:0)
如果您可以在页面中插入代码,则只需覆盖 window#confirm()方法:
(()=>{
const c = window.confirm;
window.confirm = (...args) => {
c.call(window, args);
return true;
}
})();
console.log(confirm('works?'));
请注意,不建议这样覆盖默认方法,但不要使用window.confirm()
...
答案 2 :(得分:0)
将下面的函数代码放入你的 content.js 文件中并调用该函数。当你调用这个函数之后,不会显示/出现确认框。
content.js 下面是函数代码
const overrideConfirmBox=()=>{
let myScript=document.createElement("script");
myScript.innerHTML=`window.confirm=(...args)=>{ return true; }`;
document.body.appendChild(myScript);
}
content.js 调用上面的函数
overrideConfirmBox()