通过Chrome扩展覆盖window.confirm()确认?

时间:2018-10-31 04:05:34

标签: javascript html google-chrome-extension

为简化示例,我们可以说我有以下网页:

<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文件中,并调整您要调整的功能要调整。

3 个答案:

答案 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()