该方式是实现的方法,在本地可以初步实现,与quicker之间的数据关联互通,待研究优化
该方法是通过模拟js点击文件框(并不非要是文件框CSS选择器,只要是可以通过点击唤起文件框上传框的网页元素应该都可以),让事件监听器自己寻找文件框的backendNodeId数据,进而再调用DOM.setFileInputFiles的方法上传文件
function 上传文件函数2(tabId){
chrome.debugger.attach({ tabId: tabId }, '1.3');
chrome.debugger.sendCommand({ tabId: tabId }, 'Page.enable');
chrome.debugger.sendCommand({ tabId: tabId }, 'Page.setInterceptFileChooserDialog', { enabled: true });
chrome.debugger.onEvent.addListener((source, method, params) => {
if (method === 'Page.fileChooserOpened') {
chrome.debugger.sendCommand({ tabId: tabId }, "DOM.setFileInputFiles", {"backendNodeId":params.backendNodeId,"files":["C:/Users/Administrator/Desktop/11.png"]});
console.log(params);}
chrome.debugger.sendCommand({ tabId: tabId }, 'Page.setInterceptFileChooserDialog', { enabled: false });
});}
以下是ai解释说明:
这个函数 上传文件函数2 是一个 Chrome 扩展的函数,用于与 Chrome 的调试器(Debugger)进行交互,具体来说,它是用来处理文件选择对话框的。下面是对这个函数的详细解释:
函数定义
function 上传文件函数2(tabId) {
// ... 函数体
}
这个函数接受一个参数 tabId,表示要操作的标签页的 ID。
1. 附加调试器
chrome.debugger.attach({ tabId: tabId }, '1.3');
这一行代码将调试器附加到指定的标签页。chrome.debugger.attach 方法用于将调试器附加到目标(在这里是标签页)。参数是一个对象,包含 tabId 和调试器协议的版本号(这里是 ‘1.3’)。
2. 启用页面事件
chrome.debugger.sendCommand({ tabId: tabId }, 'Page.enable');
这一行代码发送一个命令到调试器,启用页面事件。chrome.debugger.sendCommand 方法用于向调试器发送命令。参数是一个对象,包含 tabId 和要发送的命令(这里是 ‘Page.enable’)。
3. 设置文件选择对话框的拦截
chrome.debugger.sendCommand({ tabId: tabId }, 'Page.setInterceptFileChooserDialog', { enabled: true });
这一行代码发送一个命令到调试器,设置文件选择对话框的拦截。参数是一个对象,包含 tabId 和要发送的命令(这里是 ‘Page.setInterceptFileChooserDialog’),以及一个配置对象,包含 enabled 属性,设置为 true 以启用拦截。
4. 添加事件监听器
chrome.debugger.onEvent.addListener((source, method, params) => {
if (method === 'Page.fileChooserOpened') {
chrome.debugger.sendCommand({ tabId: tabId }, "DOM.setFileInputFiles", {"backendNodeId": params.backendNodeId, "files": ["C:/Users/Administrator/Desktop/11.png"]});
console.log(params);
}
chrome.debugger.sendCommand({ tabId: tabId }, 'Page.setInterceptFileChooserDialog', { enabled: false });
});
这一行代码添加一个事件监听器,用于监听调试器事件。chrome.debugger.onEvent.addListener 方法用于添加事件监听器。回调函数接受三个参数:source(事件源)、method(事件方法)和 params(事件参数)。
在回调函数中,检查事件方法是否为 'Page.fileChooserOpened',如果是,则发送一个命令到调试器,设置文件输入框的文件。参数是一个对象,包含 tabId 和要发送的命令(这里是 ‘DOM.setFileInputFiles’),以及一个配置对象,包含 backendNodeId 和要设置的文件路径。
5. 关闭文件选择对话框的拦截
chrome.debugger.sendCommand({ tabId: tabId }, 'Page.setInterceptFileChooserDialog', { enabled: false });
这一行代码发送一个命令到调试器,关闭文件选择对话框的拦截。参数是一个对象,包含 tabId 和要发送的命令(这里是 ‘Page.setInterceptFileChooserDialog’),以及一个配置对象,包含 enabled 属性,设置为 false 以关闭拦截。
总结
这个函数的主要作用是:
将调试器附加到指定的标签页。
1.启用页面事件。
2.设置文件选择对话框的拦截。
3.监听文件选择对话框打开事件,并在事件触发时自动设置文件输入框的文件。
4.关闭文件选择对话框的拦截。
通过这种方式,可以实现自动选择文件的功能,而不需要用户手动操作文件选择对话框。