javascript 通过脚本运行多个函数,executeScript

tvokkenx  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(111)

我想将扩展从manifest v2更新到manifest v3。以前我使用tabs API现在我必须使用scripting api。问题是我正在执行多个脚本,但在scripting api中我必须为代码创建多个文件或创建多个函数。那么有没有更好的方法来做到这一点?
这就是我在mv 2中的代码,我的代码中有7-8个类似的脚本

chrome.tabs.executeScript(tab.id, {
code: 'document.querySelector("#recv_address > span").textContent'
}, display_location);

我已经尝试了下面的代码,它是工作正常,但是否有任何更好的方法来做到这一点,因为我想做同样的事情为7-8脚本

function passScript() {
  let passQuery = document.querySelector("#recv_address > span").textContent;
  return passQuery;
}

chrome.scripting.executeScript(
  {
    target: { tabId: tab.id },
    func: passScript,
  },
  display_location
);
4nkexdtk

4nkexdtk1#

如果你有很多文件,你可以像这样在你的服务工人中做。

背景.js

const scriptList = ["js/a.js", "js/b.js", "js/c.js"];

scriptList.forEach((script) => {
    chrome.scripting.executeScript({
        target: {tabId: tabId},
        files: [`${script}`],
        injectImmediately: true
    }, () => void chrome.runtime.lastError);
});

清单.json

"permissions": ["scripting"],
w1e3prcc

w1e3prcc2#

您使用的API是正确的,但是您也可以向func传递参数,例如:

function passScript(selector) {
  let passQuery = document.querySelector(selector).textContent;
  return passQuery;
}

chrome.scripting.executeScript(
  {
    target: { tabId: tab.id },
    func: passScript,
    args: ["#recv_address > span"]
  },
  display_location
);

相关问题