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 () {
// ここにツイートボタンが押されたときにしたい処理を書く
// 概ねなんでも可能
})
})
これでツイートボタンをクリックした時になにかできるようになります
-
厳密には、別オリジンのフレーム内容へのアクセスとなるためです。同一ドメインのフレームであれば、このような制約は基本的にありません。 ↩