質問するログイン新規登録
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Chrome extension

Chrome拡張機能

Q&A

1回答

1808閲覧

Chrome拡張で外部ライブラリを使いたい。/kuroshiroを使用したひらがな化拡張を作りたい

guruma

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Chrome extension

Chrome拡張機能

0グッド

1クリップ

投稿2023/06/24 14:21

0

1

⚠️自分はプログラミング初心者なので大幅に勘違いしているところがあるかもしれませんがよろしくお願いいたします。

実現したいこと

Google拡張機能で外部ライブラリを使用したい。

具体的な目的はkuroshiroを使用して、サイト上の文字を全てひらがなに置き換えたい。

前提

Google Chrome 拡張で実行したらサイト上の文字列が全てひらがなに置き換えられるものを作りたい。
gooのひらがな化APIを使用して目的のものは作れたが毎回APIを使うとなると制限がかかったりしそうだと考え、漢字を含めてひらがな化できるkuroshiroを使用したいと思った。

https://github.com/hexenq/kuroshiro

npmでkuroshiro及びkuroshiro-analyzer-kuromojiを作業ディレクトリにダウンロードししたが使えそうにない。

発生している問題・エラーメッセージ

Uncaught SyntaxError: Cannot use import statement outside a module

該当のソースコード

background.js

1import Kuroshiro from 'kuroshiro'; //ここがダメらしい 2import KuromojiAnalyzer from 'kuroshiro-analyzer-kuromoji'; 3 4chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => { 5 if (request.action === 'convertToHiragana') { 6 7 const kuroshiro = new Kuroshiro(); 8 await kuroshiro.init(new KuromojiAnalyzer()); 9 var result = await kuroshiro.convert(request.sentence, { to: 'hiragana' }); 10 try { 11 sendResponse(result); 12 } catch (e) { 13 sendResponse(""); 14 console.log(e); 15 } 16 } 17 return true; 18});

content.js

1function Change() { 2 const elements = document.querySelectorAll('body *'); 3 for (let element of elements) { 4 if (element.children.length === 0 && element.textContent.trim() !== '') { 5 chrome.runtime.sendMessage( 6 { action: 'convertToHiragana', sentence: element.textContent.trim() }, 7 response => { 8 element.textContent = response; 9 } 10 ); 11 } 12 } 13 14}

試したこと

調べて色々追加してみた

manifest.json

1 "content_scripts": [ 2 { 3 "matches": [ 4 "<all_urls>" 5 ], 6 "js": [ 7 "node_modules/kuroshiro/dist/kuroshiro.js", 8 "node_modules/kuroshiro-analyzer-kuromoji/dist/kuroshiro-analyzer-kuromoji.js", 9 "content.js" 10 ] 11 } 12 ],

manifest.json

1 "background": { 2 "scripts": [ 3 "node_modules/kuroshiro/dist/kuroshiro.js", 4 "node_modules/kuroshiro-analyzer-kuromoji/dist/kuroshiro-analyzer-kuromoji.js", 5 "background.js" 6 ] 7 }

以下も追加してみた

popup.html

1 <script type="module" src="popup.js"></script> 2 <script type="module" src="node_modules/kuroshiro/dist/kuroshiro.js"></script> 3 <script type="module" src="node_modules/kuroshiro-analyzer-kuromoji/dist/kuroshiro-analyzer-kuromoji.js"></script>

以上の変更をしてみたがエラーが改善されることはなかった。

補足情報(FW/ツールのバージョンなど)

gooのAPIを使用し、目的の動作は一旦できたのでbackground.js以外はライブラリ関連を除いて問題はないと思います。

background.jsの内容だけ置き換えようとした感じです。
gooAPIで実装したとき(動作した)↓

background.js

1chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { 2 if (request.action === 'convertToHiragana') { 3 const apiUrl = 'https://labs.goo.ne.jp/api/hiragana'; 4 const appId = <ここにAPIキー>'; 5 const payload = { 6 app_id: appId, 7 sentence: request.sentence, 8 output_type: 'hiragana' 9 }; 10 fetch(apiUrl, { 11 method: 'POST', 12 headers: { 13 'Content-Type': 'application/json' 14 }, 15 body: JSON.stringify(payload) 16 }) 17 .then(response => response.json()) 18 .then(data => { 19 sendResponse(data.converted); 20 }) 21 .catch(error => { 22 console.error(error); 23 sendResponse(''); 24 }); 25 return true; 26 } 27});

自分で調べてもあまり情報が見つからなかったです、、
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

この回答はGPT-4による自動生成回答です

Chrome拡張機能では、import文を使用するためには、manifest.json"type": "module"を指定する必要があります。しかし、現在のChrome拡張機能では、バックグラウンドスクリプトでモジュールをサポートしていません。そのため、代わりにbrowserifywebpackなどのモジュールバンドラを使用して、依存関係を1つのファイルにまとめることをお勧めします。

まず、browserifyをインストールしてください。

bash

1npm install -g browserify

次に、background.jsをバンドルして新しいファイルbundle.jsを作成します。

bash

1browserify background.js -o bundle.js

これで、bundle.jsにはkuroshirokuroshiro-analyzer-kuromojiが含まれています。manifest.jsonbackgroundセクションを次のように更新してください。

json

1"background": { 2 "scripts": [ 3 "bundle.js" 4 ] 5}

最後に、background.jsimport文をrequireに変更します。

javascript

1const Kuroshiro = require('kuroshiro'); 2const KuromojiAnalyzer = require('kuroshiro-analyzer-kuromoji'); 3 4// 以降のコードは変更なし

これで、Chrome拡張機能でkuroshirokuroshiro-analyzer-kuromojiを使用できるようになります。

投稿2023/06/24 14:21

teratail-ai

Powered by GPT-4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NorioYamamoto

2023/06/26 04:27 編集

Webpackを使うと、Node.jsのパッケージを使用する拡張機能が作成出来ます。 私が作ったチュートリアルが参考になると思います。 Chrome拡張の作り方 49 Webpack https://youtu.be/S5LQ7lHHs8A
guruma

2023/06/29 14:23

回答ありがとうございます。 Webpackを使うことでNode.jsのパッケージを使用する拡張機能が作成できることができると知り、希望を持ちました。 動画通りに進めていき、main.jsをビルドするところまではうまく行ったのですがいざ使おうとすると Uncaught TypeError: t is not a constructor のというエラーが出てしまいました。 ビルドされたファイルなのでどうしたらいいかわからず...という感じになってしまいました。 対処法があれば教えていただけると幸いです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問