Я не могу использовать библиотеку Kuroshiro в своем расширении Chrome

Я изучаю Javascript и думал, что смогу сделать небольшой проект, но у меня так много ошибок, что я понятия не имею, что не так с моим кодом. Я пытаюсь создать расширение для Chrome, которое добавляет фуригану в японский текст, для этого я использую библиотеку Kuroshiro.

Я считаю, что установил его правильно, и он работает, когда я запускаю его локально. Но когда я загружаю его как расширение, оно, похоже, не работает. Вот мой манифест.json,

{
  "manifest_version": 3,
  "name": "Hello Extensions",
  "description": "Base Level Extension",
  "version": "1.0",
  "action": {
    "default_popup": "popup.html",
    "default_icon": "hello_extensions.png"
  },

  "permissions": ["activeTab", "scripting"],
    
  "web_accessible_resources": [

    {
      "resources": [
        "lib/kuroshiro.min.js","lib/kuroshiro-analyzer-kuromoji.min.js","add_furigana.js","content3.js","dict/*"
      ],
      "matches": [
        "<all_urls>"
      ]
    }
  ],
  "content_scripts": [
    {
      "js": [
        "content3.js"
      ],
      "matches": [
        "<all_urls>"
      ]
    }
  ]
}

А вот мой content3.js,

// Function to inject Kuroshiro and its dependencies into the web page
function injectKuroshiro() {
    // Create script elements for Kuroshiro and its dependencies
    const kuroshiroScript = document.createElement('script');
    kuroshiroScript.src = chrome.runtime.getURL('lib/kuroshiro.min.js');
    kuroshiroScript.onload = function() {
        const analyzerScript = document.createElement('script');
        analyzerScript.src = chrome.runtime.getURL('lib/kuroshiro-analyzer-kuromoji.min.js');
        analyzerScript.onload = function() {
            const add_furiganaScript = document.createElement('script');
            add_furiganaScript.src = chrome.runtime.getURL('add_furigana.js');
            document.head.appendChild(add_furiganaScript);

        };
        document.head.appendChild(analyzerScript);
    };
    document.head.appendChild(kuroshiroScript);
}

injectKuroshiro();

и add_furigana.js,

async function initializeKuroshiro() {
  const kuroshiro = new Kuroshiro();
  try {
    // Initialize Kuroshiro with the Kuromoji analyzer
    const dictPath = chrome.runtime.getURL('dict/'); // Assuming 'dict' is your folder name
    await kuroshiro.init(new KuromojiAnalyzer({ dicPath: dictPath }));
    
    // Convert the given text to hiragana
    const result = await kuroshiro.convert("感じ取れたら手を繋ごう、重なるのは人生のライン and レミリア最高!", { to: "hiragana" });
    
    // Output the converted text
    console.info(result);
  } catch (err) {
    console.error("Kuroshiro initialization failed:", err);
  }
}
initializeKuroshiro();

Мне выдает вот такую ​​ошибку,

И если я удалю dictPath, я получу эту ошибку

Я уверен, что у меня есть правильные файлы dict, но я понятия не имею, что является причиной этого, и чатгпт вообще не помогает.

И что странно, это работает в popup.html.

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src = "lib/kuroshiro.min.js"></script>
    <script src = "lib/kuroshiro-analyzer-kuromoji.min.js"></script>
    <script src = "add_furigana.js"></script>
</head>
<body>
    
</body>
</html>

Извините, если это глупый вопрос, но что мне здесь не хватает?

Возможно, это вам поможет: stackoverflow.com/questions/27207129/…

Symtox 01.07.2024 14:01

Итак, если я правильно понимаю, сценарии контента не могут получить доступ к другим сценариям, поэтому мой content3.js не может видеть файлы библиотеки, а сценарии, загруженные на страницу (контекст страницы), не имеют доступа к API Chrome, поэтому Я получаю сообщение об ошибке с getURL. Чтобы решить эту проблему, мне нужны события DOM, это правильно? Но тогда почему popup.html работает?

Jax 01.07.2024 15:35

getURL, вызванный content3.js, выполнен успешно. getURL, вызванный add_furigana.js, завершается с ошибкой. Поэтому я думаю, что было бы лучше включить обработку add_furigana.js в content3.js.

Norio Yamamoto 02.07.2024 02:19

Если я это сделаю, я получу ошибку "Kuroshiro is not defined". И если я распечатаю путь к диктовке, используя console.info(chrome.runtime.getURL('dict/')) в content3.js, и вручную скопирую его в add_furigana.js, я все равно получу ошибку «отсутствующие файлы».

Jax 02.07.2024 08:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалите content3.js и загрузите kuroshiro.min.js, kuroshiro-analyzer-kuromoji.min.js и add_furigana.js в качестве сценариев контента.

  "web_accessible_resources": [
    {
      "resources": [
        "dict/*"
      ],
      "matches": [
        "<all_urls>"
      ]
    }
  ],
  "content_scripts": [
    {
      "js": [
        "lib/kuroshiro.min.js",
        "lib/kuroshiro-analyzer-kuromoji.min.js",
        "add_furigana.js"
      ],
      "matches": [
        "<all_urls>"
      ]
    }
  ]

Я мог бы поклясться, что попробовал это, и это не сработало, но я попробовал сейчас, и это работает, спасибо.

Jax 03.07.2024 08:13

Другие вопросы по теме