🛫
declarativeNetRequest APIでリダイレクトする【拡張機能】【Manifest v3】
なぜか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
に指定しておく必要がある点
type
がblock
の場合は指定しておく必要がないため、同じ感覚で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"
]
}
}
]
特定のクエリパラメータを消す
クエリパラメータを追加ではなく削除する場合addOrReplaceParams
をremoveParams
に置き換えるだけ
追加(または置き換え)の場合
"addOrReplaceParams":[
{
"key":"aiueo",
"value":"testValue"
}
]
↓
削除
"removeParams":[
"aiueo"
]
- 削除の場合、当たり前ですがkeyの指定のみでOKです
- 何故かURLに?マークだけ残ります、見た目の問題だけど
最後に
成果物のリンクを載せておきます(Wikipediaのクエリを書き換えて旧スタイルに戻すだけ)
これから度々記事を書きたいので、いいねとフォローしてください!何でもしません!
Discussion