0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Google Chrome】拡張機能の作成方法を分かりやすく解説してみた Part. 4

Posted at

#アクセスしたページのh1(見出し)の数をポップアップ上に表示する
前回はアラートに表示させていましたが、今回はポップアップ上に表示させてみます。では、また最初から作りましょう。example_extension2フォルダを作成しmanifest.jsonファイルを作成しエディターで開いて下さい。

manifest.json
{

    "name" : "popupH1" ,
    "version" : "1.0" ,
    "description" : "hoge" ,
    "manifest_version" : 2 ,

    "permissions" : [
        "tabs" , "activeTab" , "<all_urls>"
    ] ,

    "browser_action" : {
        "default_popup" : "popupdayo.html"
    }

}

permissionsでchrome.tabs、activeTab、全てのURLに対する権限を許可。
browser_actiondefault_popupでは、デフォルトのポップアップ表示時に使用するHTMLファイルを指定します。
今は**Manifest V3 ( manifest_version : 2より最新のバージョン )**を使う必要性が無さそうなので、manifest_versionは2のままで大丈夫です。

次はpopupdayo.htmlを作成しましょう。
表示するポップアップの部分です。

popupdayo.html
<!DOCTYPE html>
<html dir="ltr">
    <head>
        <meta charset="utf8" />
    </head>
    <body>
        <div id="url"></div>
        <div id="list"></div>
        <script src="popupdayoScript.js"></script>
    </body>
</html>

**id="url"**は現在アクティブなタブのURLを表示するセクションです。

**id="list"**はh1の数と一覧を表示するセクションです。

下のscriptタグはpopupdayoScript.jsを作成し、埋め込みます。今回の主となる部分ですね。
popupdayoScript.jsに、現在閲覧中ページのh1の数等をポップアップ上に表示させるコードを書き込んでいきます。それではpopupdayoScript.jsを作成しエディタで開いて下さい。

popupdayoScript.js
(function(){
    // <div id="url"> の要素を取得
    let url = document.getElementById("url");
    let list = document.getElementById("list");

    //現在アクティブなタブを問い合わせ、タブの配列をコールバック
    chrome.tabs.query( { active : true , currentWindow : true } , (tabArray) => {
        const title = tabArray[0].title;
        const tabUrl = tabArray[0].url;
        const tabId = tabArray[0].id;

        url.innerHTML = `ページURL : ${tabUrl}<br/>ページタイトル : ${title}<br/>`;

        //タブ上でJavaScriptコードを実行させる
        chrome.tabs.executeScript(tabId , {
            
            code : "(function() { var arr = []; for(let i of document.body.querySelectorAll('h1') ){ arr.push(i.innerText); } return arr; } )();" //即時関数式を用いh1の文字列が格納された配列をリターンする

        } , (any) => { //リターンされたものがコールバックされる
            list.innerHTML = `h1の数 : ${any[0].length}<br/>`;
            for( let i of any[0] ){
                list.innerHTML += `<br/>${i}`;
            }
        });
    });
})();

拡張機能アイコンを押下し、ポップアップが表示された際にこのスクリプトが実行されます。
現在のファイル構成:
19.png
解説的ななにか:
20.png
それではchrome://extensionsにアクセスし、作成した拡張機能を導入しテストしてみましょう。
まず右上のデベロッパーモードを有効にして、パッケージ化されていない拡張機能を読み込むをクリックし、example_extension2フォルダを選択してください。

導入が終わったらまたGoogleで**「あ」**とでも検索してみましょう。

21.png
拡張機能のポップアップを表示させてみると...
22.png
成功ですね!

#おわり

解説:指定したプロパティの全てのタブ又は、全てのタブを取得する
chrome.tabs.query(queryInfo: object, callback: function)

解説:指定したタブIDのタブにJavaScriptコードを注入する
chrome.tabs.executeScript(tabId?: number, details: extensionTypes.InjectDetails, callback: function)

お疲れ様でした( ^^) _旦~~

引用:
https://developer.chrome.com/docs/extensions/reference/
https://developer.chrome.com/docs/extensions/reference/tabs/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?