浏览器网页自动关闭弹窗的方法(MV3)

动作开发 · 1778 次浏览
涛涛涛 创建于 3天15小时前

此方式对prompt、alert、confirm这三种弹窗有效,其他的不确定,此函数只需要运行一次就行,不要多次运行,运行后它会监控网页的弹窗,并自动关闭弹窗

//弹窗关闭函数
 async function 弹窗关闭(e) {
        let {target: t, commandParams: o} = e
          , n = await Pe(t)
          , a = !1;
        try {
            (a = (await chrome.debugger.getTargets()).some( (u) => u.tabId === n.tabId && u.attached, )),
            a || (await chrome.debugger.attach(n, "1.3"));
            chrome.debugger.sendCommand(n, "Page.enable");
            chrome.debugger.onEvent.addListener(function(source, message, params) {
                if (message === "Page.javascriptDialogOpening") {
                    chrome.debugger.sendCommand(n, "Page.handleJavaScriptDialog",o)
                }
            });
            return a || (await chrome.debugger.detach(n)),true
        } catch (s) {
            if (!a)
                try {
                    await chrome.debugger.detach(n)
                } catch (l) {
                    console.error("\u5206\u79BB\u8C03\u8BD5\u5668\u65F6\u51FA\u9519:", l)
                }
            throw s;
        }
    }

//参数说明
target: 调试目标----{"tabId": 824089761}
commandParams:弹窗关闭 -----确定按钮("accept": true)取消按钮("accept": false)

//参数示例
{
  "target": {"tabId": 824089761},
 "commandParams":{"accept": true,"promptText": ""}
}

 

 


涛涛涛 3天15小时前 :

子程序测试可用,与此方法有少许区别

https://getquicker.net/subprogram?id=23025bc0-4df4-4ab4-9c3b-08dd91d533ab

Neal-HK 3天9小时前 :

https://getquicker.net/QA/Question/31106#112035
这种弹窗能不能用这个方法勾选复选框后,点击打开QuickerStarter按钮呢?
在网页插入一个<a href="quicker:runaction:动作名称?动作参数">动作名称</a>,然后第一次点击的时候,浏览器会弹窗一个弹窗

涛涛涛 回复 Neal-HK 2天21小时前 :

https://getquicker.net/subprogram?id=02c9b252-374b-4d59-9c57-08dd91d533ab

这种弹窗应该无法关闭,你可以换一种思路,例如:判断查找文字是否存在来代替窗口是否存在,再使用按键Tab键和Enter键,关闭此弹窗,上面子程序可以测试用

Neal-HK 回复 涛涛涛 2天9小时前 :

好的,感谢

回复内容
CL 3天15小时前
#1

感谢分享!

涛涛涛 回复 CL 3天13小时前 :

//这个方法是对上面方法的优化,可以随变量的变化多次运行,运行成功时,返回弹窗的([内容,网址,类型])数组,可能用到的时候较少

async function 弹窗关闭2(e) {

        let {target: t, commandParams: o} = e

          , n = await Pe(t)

          , a = !1;

        try {

            (a = (await chrome.debugger.getTargets()).some( (u) => u.tabId === n.tabId && u.attached, )),

            a || (await chrome.debugger.attach(n, "1.3"));

            let dd;

            if(chrome.debugger.bb==null){

chrome.debugger.sendCommand(n, 'Page.enable');

chrome.debugger.bb=1;

chrome.debugger.onEvent.addListener(function(source, message, params) {if (message === "Page.javascriptDialogOpening") {chrome.debugger.aa=[params.message,params.url,params.type]}});

dd=false;}

            if(chrome.debugger.aa){

dd=chrome.debugger.aa;

chrome.debugger.sendCommand(n,"Page.handleJavaScriptDialog",o);

chrome.debugger.aa=null;}else{dd=false;}

            return a || (await chrome.debugger.detach(n)),dd

        } catch (s) {

            if (!a)

                try {

                    await chrome.debugger.detach(n)

                } catch (l) {

                    console.error("\u5206\u79BB\u8C03\u8BD5\u5668\u65F6\u51FA\u9519:", l)

                }

            throw s;

        }

    }


//参数说明

target: 调试目标----{"tabId": 824089761}

commandParams:弹窗关闭 -----确定按钮("accept": true)  取消按钮("accept": false)  设置内容("promptText": "1111")只对prompt框起作用


//参数示例

{

  "target": {"tabId": 824089761},

 "commandParams":{"accept": true,"promptText": ""}

}

涛涛涛 最后更新于 3天13小时前
回复主贴