Google AdsenseMaterial Design Lite(MDL)読み込みれる問題

1 min read

現象

Material Design Lite(以下、MDL)で構築したサイト(mdl-js-layout使用)にGoogle Adsenseを埋め込む。埋め込んだページを表示すると、広告が一度表示された後に再読み込みが発生してしまう。

調査

mdl-componentupgradedイベントを使う

MDLの issue に報告があった「Google adsense is loaded twice because of "mdl-js-layout" · Issue #1926 · google/material-design-lite:

mdl-componentupgradedイベントを拾って、そこでスクリプトを読みこめば良さそう。

Adsense の広告コードはこんな感じ。

//pagead2.googlesyndication.com/pagead/js/adsbygoogle.jsmdl-componentupgradedのタイミングで読み込むようにしてみる。

動的に読み込む

Adsenseのスクリプトをmdl-componentupgradedのタイミングで動的に読み込む。
document.addEventListener('mdl-componentupgraded', function() {
    if (!document.getElementById('adsbygooglejs')) {
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
        script.id = 'adsbygooglejs';
        script.src = "//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
        head.appendChild(script);
        // 以下略
    }
});
mdl-componentupgradedが何度か呼ばれることを考慮して、既にスクリプトが埋め込まれている場合はスルーする。

これで問題の事象は解消した。

このページをシェアする

Related Articles

近年のWeb開発においてjQueryの利用をやめるべき理由

jQuery の功績と功罪 / 現代の Web 開発と jQuery / jQuery をやめるメリット / jQuery の代替手段 / おわり / Footnotes

[ESLint] 特定のimportにおいてパスの末尾スラッシュを禁止する方法

背景 / やりたいこと / @typescript-eslint/no-restricted-imports を利用した / 余談(末尾のスラッシュ自体を禁止にする)

`<input type="range">`のstepを可変にする方法

仕様 / 完成デモ / 実装 / 参考

[Vite] CSSだけをビルドする方法

背景 / Vite をインストール / 仕様

CSS in JSとは何か

想定読者 / そもそも JS フレームワーク(React、Vue.js)を採用する理由とは何か / 「命令的 UI」 と 「宣言的 UI」 / 「命令的 UI」 VS 「宣言的 UI」 / CSS in JS とは / CSS in JS ライブラリ / Emotion の使い方 / 利用するメリット / 利用するデメリット / 関連 / Footnotes