请问浏览器插件后台命令(mv3)模块能不能传递变量和接收变量,用来更新或接收插件后台的全局变量

使用问题 · 592 次浏览
涛涛涛 创建于 1天3小时前

在浏览器插件使用中,可能需要使用cdp协议中一些事件监控,是否有方式可以通过在浏览器后台命令(mv3)这个模块,更新浏览器插件后台提前声明的全局变量,返回浏览器后台声明的全局变量,这样就可以通过主动在浏览器插件后台运行这些事件监控来完成一些不太好封装成脚本的cdp命令,如:关闭弹窗,填写文件框,获取响应数据,获取框架id等


function handleDebuggerEvent(source, method, params) {
//监控浏览器弹窗
  if (method === "Page.javascriptDialogOpening") {
//传递需要更新全局变量用来关闭弹窗(点击确定或取消)
    chrome.debugger.sendCommand(source, "Page.handleJavaScriptDialog",{"accept": window.aa})

  };
//监控浏览器文件框
  if (method === 'Page.fileChooserOpened') {
//传递需要更新全局变量用来上传文件路径
    chrome.debugger.sendCommand(source, "DOM.setFileInputFiles", {"backendNodeId":params.backendNodeId,"files":window.bb})
  };
}

chrome.debugger.onEvent.addListener((source, method, params) => {
//监控浏览器响应接收数据
  if (method === 'Network.responseReceived') {
    const { requestId, response } = params;
    // 传递需要更新全局变量用来监控的url
    if (response.url.includes(substr)) {
      console.log(`111: ${requestId}`);
    
      chrome.debugger.sendCommand(
        source,
        'Network.getResponseBody',
        { requestId: requestId },
        (result) => {
          if (chrome.runtime.lastError) {
            console.error("Failed to get response body:", chrome.runtime.lastError.message);
            return;
          }
          //需要接收全局变量响应的数据body
          let bodyContent = result.body;
          console.log("222:", bodyContent);
        });
    }}
});

回复内容
CL 7小时46分钟前
#1
没有十分理解。全局变量是在哪里声明的呢?直接写在插件程序里么?
涛涛涛 回复 CL 6小时53分钟前 :



1.全局变量是写在插件后台的,可以是自己定义的或者是在插件文件里内置一些全局变量用(上面的是我自己定义的)
2.就是想用浏览器后台命令(mv3)这个模块的更新或者返回这些全局变量的数据(问问能不能现实)
3.由于是cdp协议事件监控,需要提前写好监控函数,运行监控函数,在监控函数里用全局变量充当参数传递。
(这个监控函数是我自己主动(手动)在后台运行的,不是写到插件文件里的,用的时候自己运行一下,用后开关一下插件,刷新一下就行)

涛涛涛 最后更新于 6小时41分钟前
回复主贴