1
0

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 1 year has passed since last update.

GTM Container Switcher

Posted at

gtm-container-switcher

目的

  • Chrome機能拡張
  • デバッグなどの目的で、サイトに実装されているGTMコンテナを切り替えるツール
  • 出回っているリダイレクト目的の機能拡張だと、期待通りに動作しないために自作

使い方

インストール

  • src.zipをダウンロードして解凍
  • Chromeブラウザを開き、chrome://extensions/にアクセス
  • ディベロッパーモードを有効にする
  • パッケージ化されていないChrome機能拡張を読み込むをクリック
  • manifest.jsonのあるフォルダを指定

使い方

  • 機能拡張のアイコンをクリック
  • 変換したいGTMコンテナIDを設定
  • 停止したい場合は「停止」ボタンをクリック

開発メモ

  • Chromeの新しいAPIであるdeclarativeNetRequestを使用
  • マニフェスト3以降の対応であるため、資料がなかなか見つからなかった
  • サンプルコードは次の通り

参考資料


manifestでのフィルタ設定例

manifest.json

  • host_permissionsを指定(ホスト名を固定値にすると、なぜか動かない)
  • manifest_versionには3を指定
  • permissionsdeclarativeNetRequestを追加
{
    "name": "_GTMContainerSwitcher",
    "version": "1",
    "declarative_net_request":
    {
        "rule_resources": [
        {
            "id": "ruleset_1",
            "enabled": true,
            "path": "rules.json"
        }]
    },
    "permissions": [
        "activeTab",
        "scripting",
        "declarativeNetRequest"
    ],
    "host_permissions": [
        "https://*/gtm.js"
    ],
    "manifest_version": 3
}

rules.jsonでの記述

JSONファイル

[
    {
        "id": 4,
        "priority": 1,
        "action": {
            "type": "redirect",
            "redirect": {
                "transform": {
                    "queryTransform": {
                        "addOrReplaceParams": [
                            {
                                "key": "id",
                                "value": "GTM-XXXXXX"
                            }
                        ]
                    }
                }
            }
        },
        "condition": {
            "urlFilter": "www.googletagmanager.com/gtm.js",
            "resourceTypes": [
                "script"
            ]
        }
    }
]

JavaScriptによるダイナミックルールの追加

ルールの追加

chrome.declarativeNetRequest.updateDynamicRules({
    addRules: [{
        'id': 279137441,
        'priority': 1,
        'action': {
            'type': 'redirect',
            "redirect": {
                "transform": {
                    "queryTransform": {
                        "addOrReplaceParams": [{
                            "key": "id",
                            "value": "GTM-XXXXXX"
                        }]
                    }
                }
            }
        },
        'condition': {
            "urlFilter": "www.googletagmanager.com/gtm.js",
            "resourceTypes": [
                "script"
            ]
        }
    }],
    // removeRuleIds: [1001]
})

ルールの停止

(async () => {
    chrome.declarativeNetRequest.updateDynamicRules({
    removeRuleIds: [279137441]
    });
})();

稼働中のルールを一覧で抽出

(async () => {
    var rules = await chrome.declarativeNetRequest.getDynamicRules();
    console.log(rules)
})();
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?