LoginSignup
3
1

More than 3 years have passed since last update.

【JavaScript】ツイートボタンのクリック時にイベント計測などをする

Posted at

Twitter 公式のツイートボタンを使っているとき、ボタンは iframe で実装されているため、通常の click イベントは取れません1。ボタンがクリックされたときになにかしたい場合(例: Google Analyticsのイベント計測など)は、Twitter が提供する widgets.js というスクリプトを使います。

TL;DR

最終形は以下のような感じになります。

<body>
<!-- ... -->

<!-- ツイートボタン(公式から雛形コードをコピペしてボタンを設置したいところに貼る) -->
<a class="twitter-share-button"
  href="https://twitter.com/intent/tweet">
Tweet</a>

<!-- ... -->

<!-- 以下のコードはどこに貼ってもよいが、bodyの閉じタグの前などが無難 -->

<!-- widgets.jsの読み込み(公式から雛形コードをコピペ) -->
<script>window.twttr = (function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0],
    t = window.twttr || {};
  if (d.getElementById(id)) return t;
  js = d.createElement(s);
  js.id = id;
  js.src = "https://platform.twitter.com/widgets.js";
  fjs.parentNode.insertBefore(js, fjs);

  t._e = [];
  t.ready = function(f) {
    t._e.push(f);
  };

  return t;
}(document, "script", "twitter-wjs"));</script>

<!-- widgets.jsを使っていろいろする(自分で書く部分) -->
<!-- 必ず上記の雛形コードの後に書く -->
<script>
twttr.ready(function (twttr) {
  twttr.events.bind('click', function () {
    // ここにツイートボタンが押されたときにしたい処理を書く
    // 例: Google Analyticsのイベント計測
    ga('send', 'event', 'Tweet Button', 'click')
  })
})
</script>
</body>

解説

0. ツイートボタンの設置

ツイートボタンそのものの設置の詳細はここでは触れません。以下のドキュメントなどを参考にしてください。
https://developer.twitter.com/en/docs/twitter-for-websites/tweet-button/overview

1. widgets.jsを読み込む

ツイートボタンなどを自分の JavaScript からごにょごにょするには、Twitter が提供する widgets.js という JavaScript を読み込む必要があります。

以下のページから雛形コードをコピーして、ページの HTML に貼り付けてください。場所はどこでもよいですが、<body> の閉じタグの前あたりがよいでしょう。
https://developer.twitter.com/en/docs/twitter-for-websites/javascript-api/guides/set-up-twitter-for-websites

2. widgets.jsを使ってイベントリスナを設定する

上記の雛形を埋め込むと、それ以降の行で twttr というオブジェクトが使えるようになります(雛形より上にかかれているコードで twttr を使うと未定義エラーになります)。twttr でできることを網羅的に知りたい場合は、以下のドキュメントを参照してください。
https://developer.twitter.com/en/docs/twitter-for-websites/javascript-api/overview

今回は twttr.events.bind を使って、click のイベントリスナ(イベントが発生した時に実行したい処理)を設定します。

ただ、イベントリスナの設定は、twttr の初期化が終わってからでないとできません。そこで、twttr.ready を使って、「twttr の初期化が終わった時に」イベントリスナを登録するように包みます。

twttr.ready(function (twttr) {
  // ここに twttr の初期化が完了したときにやりたい処理を書く
  // 今回はclickのイベントリスナを登録する
  twttr.events.bind('click', function () {
    // ここにツイートボタンが押されたときにしたい処理を書く
    // 概ねなんでも可能
  })
})

これでツイートボタンをクリックした時になにかできるようになります:ok_woman:


  1. 厳密には、別オリジンのフレーム内容へのアクセスとなるためです。同一ドメインのフレームであれば、このような制約は基本的にありません。 

3
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
3
1