此方式对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": ""}
}
//这个方法是对上面方法的优化,可以随变量的变化多次运行,运行成功时,返回弹窗的([内容,网址,类型])数组,可能用到的时候较少
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": ""}
}
子程序测试可用,与此方法有少许区别
https://getquicker.net/subprogram?id=23025bc0-4df4-4ab4-9c3b-08dd91d533ab
https://getquicker.net/QA/Question/31106#112035
这种弹窗能不能用这个方法勾选复选框后,点击打开QuickerStarter按钮呢?
在网页插入一个<a href="quicker:runaction:动作名称?动作参数">动作名称</a>,然后第一次点击的时候,浏览器会弹窗一个弹窗
https://getquicker.net/subprogram?id=02c9b252-374b-4d59-9c57-08dd91d533ab
这种弹窗应该无法关闭,你可以换一种思路,例如:判断查找文字是否存在来代替窗口是否存在,再使用按键Tab键和Enter键,关闭此弹窗,上面子程序可以测试用
好的,感谢