iT邦幫忙

0

google擴展,函數無法定義

  • 分享至 

  • xImage

請AI幫忙寫了一些功能,前面一值很順利,但是想要用表頭的標題來做switch,可是他一直顯示函數未定義,問AI問半天也解不開,麻煩高手協助幫忙,謝謝。
程式如下:

// 記錄腳本啟動
console.log("測試腳本啟動中...");

// 主函數,監聽命令並執行操作
chrome.commands.onCommand.addListener((command) => {
  if (command === "open_tool") {
    chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
      if (tabs.length > 0) {
        chrome.scripting.executeScript({
          target: { tabId: tabs[0].id },
          func: executeBasedOnTitle, // 傳遞處理函數
        });
      }
    });
  }
});

// 根據標題選擇執行對應函數
function executeBasedOnTitle() {
  console.log("測試腳本執行中...");
  const elements = document.querySelectorAll("div.display-1"); // 選取所有標題元素
  if (elements.length === 0) {
    console.warn("未找到任何標題元素,請確認網頁結構。");
    return;
  }

  const targetIndex = 0; // 修改為目標標題的索引
  const titleElement = elements[targetIndex];

  if (!titleElement) {
    console.warn(`未找到索引為 ${targetIndex} 的標題元素,請確認網頁結構。`);
    return;
  }

  const titleText = titleElement.textContent.trim(); // 獲取標題文字
  console.log("當前報告標題:", titleText);

  // 根據標題文字執行對應的函數
  switch (titleText) {
    case "吊籠檢查報告":
      if (typeof execute吊籠檢查報告 === "function") {
        execute吊籠檢查報告();
      } else {
        console.error("函數 execute吊籠檢查報告 未定義!");
      }
      break;

    case "定期檢查報告":
      if (typeof execute定期檢查報告 === "function") {
        execute定期檢查報告();
      } else {
        console.error("函數 execute定期檢查報告 未定義!");
      }
      break;

    case "固定式起重機定期檢查報告表":
      if (typeof executeFixedCraneInspectionReport === "function") {
        executeFixedCraneInspectionReport();
      } else {
        console.error("函數 executeFixedCraneInspectionReport 未定義!");
      }
      break;

    case "移動式起重機定期檢查報告表":
      if (typeof executeMobileCraneInspectionReport === "function") {
        executeMobileCraneInspectionReport();
      } else {
        console.error("函數 executeMobileCraneInspectionReport 未定義!");
      }
      break;

    default:
      console.warn("未找到對應的程式,請確認報告標題內容:", titleText);
  }
}

// 示例函數:吊籠檢查報告
function execute吊籠檢查報告() {
  console.log("正在執行吊籠檢查報告的處理邏輯...");
  // 添加您的邏輯
}

// 示例函數:定期檢查報告
function execute定期檢查報告() {
  console.log("正在執行定期檢查報告的處理邏輯...");
  // 添加您的邏輯
}

// 示例函數:固定式起重機定期檢查報告表
function executeFixedCraneInspectionReport() {
  console.log("正在執行固定式起重機定期檢查報告表的處理邏輯...");
  // 添加您的邏輯
}

// 示例函數:移動式起重機定期檢查報告表
function executeMobileCraneInspectionReport() {
  console.log("正在執行移動式起重機定期檢查報告表的處理邏輯...");
  // 添加您的邏輯
}

開人員工具的畫面如下:

https://ithelp.ithome.com.tw/upload/images/20250102/20127077qVtCkciCti.jpg

DanSnow iT邦好手 1 級 ‧ 2025-01-02 00:32:35 檢舉
我來猜猜看,你改完 code 後是不是忘了重新載入開發中的 extension 了,你按一下 error 那行右邊的 VM9306:42 ,那應該會帶你到 code 那邊,看一下是不是新版的
謝謝,我有重新載入在確認一次,但仍然不行
我自己看半天也是看不出來為啥不行,明明已經帶出標題是"固定式起重機定期檢查報告表",下面也有看到對應的function,但是網頁上就是顯示找不到...
if (typeof executeFixedCraneInspectionReport === "function"),改成if (typeof executeFixedCraneInspectionReport == "function") 試試看
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
zivzhong
iT邦新手 2 級 ‧ 2025-01-02 15:03:22

要然全部塞在一起?

chrome.commands.onCommand.addListener((command) => {
  if (command === "open_tool") {
    chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
      if (tabs.length > 0) {
        chrome.scripting.executeScript({
          target: { tabId: tabs[0].id },
          func: () => {
            // === 在被注入的函數內,定義所有需要的函數 ===
            function execute吊籠檢查報告() {
              console.log("正在執行吊籠檢查報告的處理邏輯...");
            }
            function execute定期檢查報告() {
              console.log("正在執行定期檢查報告的處理邏輯...");
            }
            function executeFixedCraneInspectionReport() {
              console.log("正在執行固定式起重機定期檢查報告表的處理邏輯...");
            }
            function executeMobileCraneInspectionReport() {
              console.log("正在執行移動式起重機定期檢查報告表的處理邏輯...");
            }

            // === 然後在同一個作用域裡執行你的主邏輯 ===
            function executeBasedOnTitle() {
              console.log("測試腳本執行中...");
              const elements = document.querySelectorAll("div.display-1");
              if (elements.length === 0) {
                console.warn("未找到任何標題元素,請確認網頁結構。");
                return;
              }

              const targetIndex = 0;
              const titleElement = elements[targetIndex];
              if (!titleElement) {
                console.warn(`未找到索引為 ${targetIndex} 的標題元素...`);
                return;
              }

              const titleText = titleElement.textContent.trim();
              console.log("當前報告標題:", titleText);

              switch (titleText) {
                case "吊籠檢查報告":
                  execute吊籠檢查報告();
                  break;
                case "定期檢查報告":
                  execute定期檢查報告();
                  break;
                case "固定式起重機定期檢查報告表":
                  executeFixedCraneInspectionReport();
                  break;
                case "移動式起重機定期檢查報告表":
                  executeMobileCraneInspectionReport();
                  break;
                default:
                  console.warn("未找到對應的程式:", titleText);
              }
            }
            // 執行
            executeBasedOnTitle();
          },
        });
      }
    });
  }
});

我要發表回答

立即登入回答