使用清单 v3 创建一个更改特定网页上的值的 Web 扩展

问题描述 投票:0回答:0

我想做一个扩展来帮助我完成当前的工作,但我一直无法让它工作。为了简化 - 我将发布一个扩展示例的代码,该示例应将 google.com 页面上“我感觉很幸运”按钮的值更改为用户在扩展弹出窗口中输入的自定义值。

问题是,无论我尝试了多少种不同的方法,我都无法访问按钮的值。

扩展包含4个文件:popup.html、popup.js、manifest.json和background.js

manifest.json 文件如下所示:

{
    "manifest_version": 3,
    "name": "Lucky Button Changer",
    "version": "1.0",
    "description": "A Chrome extension that allows users to change the value of the 'I'm feeling lucky' button on google.com",
    "permissions": ["activeTab"],
    "host_permissions": ["https://www.google.com/*"],
    "background": {
        "service_worker": "background.js"
    },
    "action": {
        "default_popup": "popup.html"
    }
}

Popup.html 文件如下所示:

<!DOCTYPE html>
<html>

<head>
    <title>Lucky Button Changer</title>
    <script src="popup.js"></script>
</head>

<body>
    <input type="text" id="luckyValue" placeholder="Enter new value for 'I'm feeling lucky' button">
    <button id="changeButton">Change Value</button>
</body>

</html>

Popup.js 文件如下所示:

let luckyButton = document.querySelector(
  "#ow6 > div.FPdoLc.lJ9FBc > center > input.RNmpXc"
);

if (luckyButton) {
  luckyButton.addEventListener("click", async () => {
    let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
    let input = document.getElementById("luckyInput");
    let inputValue = input.value;
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      func: () => {
        let luckyButton = document.querySelector(
          "#ow6 > div.FPdoLc.lJ9FBc > center > input.RNmpXc"
        );
        luckyButton.value = inputValue;
      },
    });
  });
} else {
  console.log("Could not find lucky button on page.");
}

最后,background.js 文件如下所示:

chrome.action.onClicked.addListener((tab) => {
  chrome.scripting.executeScript({
    target: { tabId: tab.id },
    function: () => {
      chrome.action.openPopup();
    },
  });
});

在 popup.js 文件中,我将代码放在一个 try - catch 块中,只是为了看看我是否会获取该元素,因为这是我一直遇到的主要问题。结果,我得到“在页面上找不到幸运按钮”。打印在控制台中,因为我无法获得按钮的值。我已经为这个问题苦苦思索了太久,所以我希望有扩展经验的人可以帮助我解决这个问题,让这个例子起作用,这样我就可以将逻辑应用到我的实际项目中。谢谢!

javascript google-chrome-extension chrome-extension-manifest-v3 dom-manipulation
© www.soinside.com 2019 - 2024. All rights reserved.