🛫

declarativeNetRequest APIでリダイレクトする【拡張機能】【Manifest v3】

2022/07/13に公開

なぜかdeclarativeNetRequest APIのリダイレクトに関する記事が見つからなかったので初カキコ

このAPIはブロックだけでなく、リダイレクト、クエリパラメータの追加、削除などもできるため、AmazonのURLにクエリを付与して中華 怪しい製品を非表示にしたりなどもできます

ブロックやAPIの詳しい仕様に関しては他所のサイトを見てください

グーグルの公式ドキュメントには、一部Manifest v2時代の記述が含まれていて、そのまま従って書くと動かなかったりします

単純にリダイレクトしてみる

https://google.com から https://example.com にリダイレクトします
urlFilterのマッチパターンの書き方はここ

manifest.json
{
    "name":"拡張機能の名前",
    "version":"1.0.0",
    "manifest_version":3,
    "declarative_net_request":{
        "rule_resources":[
            {
                "id":"ruleset",
                "enabled":true,
                "path":"ruleset.json"
            }
        ]
    },
    "permissions":[
        "declarativeNetRequest"
    ],
    "host_permissions":[
        "*://*.google.com/*"
    ]
}
ruleset.json
[
    {
        "id":1,
        "action":{
            "type":"redirect",
            "redirect":{
                "url":"https://example.com"
            }
        },
        "condition":{
            "urlFilter":"google.com",
            "resourceTypes":[
                "main_frame"
            ]
        }
    }
]

注意点

  • ここで罠なのが、urlFilterで指定したサイトをhost_permissionsに指定しておく必要がある点
    typeblockの場合は指定しておく必要がないため、同じ感覚でredirectすると死にます。(自分)
  • host_permissionsのURLの指定方法に関しては公式ドキュメントを参照

クエリパラメータを弄る

別のドメインやサイトにリダイレクトするのではなく、クエリパラメータを追加したり消したりもできます

クエリを追加する(または置き換え)

https://example.com にアクセスするとクエリパラメータにaiueo=testValueを追加します

manifest.json
{
    "name":"拡張機能の名前",
    "version":"0.0.1",
    "manifest_version":3,
    "declarative_net_request":{
        "rule_resources":[
            {
                "id":"ruleset",
                "enabled":true,
                "path":"ruleset.json"
            }
        ]
    },
    "permissions":[
        "declarativeNetRequest"
    ],
    "host_permissions":[
        "*://example.com/*"
    ]
}
ruleset.json
[
    {
        "id":1,
        "action":{
            "type":"redirect",
            "redirect":{
                "transform":{
                    "queryTransform":{
                        "addOrReplaceParams":[
                            {
                                "key":"aiueo",
                                "value":"testValue"
                            }
                        ]
                    }
                }
            }
        },
        "condition":{
            "urlFilter":"example.com",
            "resourceTypes":[
                "main_frame"
            ]
        }
    }
]

特定のクエリパラメータを消す

クエリパラメータを追加ではなく削除する場合addOrReplaceParamsremoveParamsに置き換えるだけ

追加(または置き換え)の場合
"addOrReplaceParams":[
    {
	"key":"aiueo",
	"value":"testValue"
    }
]

削除
"removeParams":[
    "aiueo"
]
  • 削除の場合、当たり前ですがkeyの指定のみでOKです
  • 何故かURLに?マークだけ残ります、見た目の問題だけど

最後に

成果物のリンクを載せておきます(Wikipediaのクエリを書き換えて旧スタイルに戻すだけ)
https://github.com/doma-itachi/OldWikiStyle
これから度々記事を書きたいので、いいねとフォローしてください!何でもしません!

Discussion