昨日のナニゴダカシラベルーノの更新で実装したんですが、ボタンからつぶやく際の内容を動的に変更するようにしてあります。
ひと手間だったのでやり方を公開しておきます。なんか強引でBKちっくなので、もっとうまいやり方あれば教えてください。
Twitterボタン
本家サイトから。
任意の内容でつぶやくボタンはここで作る事ができます。それはそれで良いんですが、動的に変更するにはひと手間かかるわけです。
iframe
のURLを確認
先に結論を述べますが、Twitterボタンのiframe
のURLを変更します。
公式サイトで得られるコードはa
とscript
だけでiframe
はないのですが、このコードを貼付けると、画面表示時にスクリプトが実行されてa
要素は消え、代わりにボタンを表示するiframe
要素が設置されます。このiframe
に指定しているURLに応じてボタンが生成されるようです。
例えばこんな感じのURL。
http://platform.twitter.com/widgets/tweet_button.1326407570.html#_=1326949500872
&_version=2&count=horizontal&enableNewSizing=false&id=tweet-button&lang=ja&origi
nal_referer=http%3A%2F%2Fginpen.com%2Flab%2Fwhatlang%2F&size=m&text=%E4%BD%95%E8
%AA%9E%E3%81%A0%E3%81%8B%E8%AA%BF%E3%81%B9%E3%82%8B%E3%82%84%E3%81%A4%20%2F%20%E
3%83%8A%E3%83%8B%E3%82%B4%E3%83%80%E3%82%AB%E3%82%B7%E3%83%A9%E3%83%99%E3%83%AB%
E3%83%BC%E3%83%8E%20http%3A%2F%2Fginpen.com%2Flab%2Fwhatlang%2F&url=ginpen.com%2
Flab%2Fwhatlang%2F
パラメーターというか世に言うところのハッシュ#
なんですが、まあともかく整理してみるとこんな感じです。
http://platform.twitter.com/widgets/tweet_button.1326407570.html#
…
name | value |
---|---|
_ | 1326949500872 |
_version | 2 |
count | horizontal |
enableNewSizing | false |
id | tweet-button |
lang | ja |
original_referer | https://ginpen.com/lab/whatlang/ |
size | m |
text | 何語だか調べるやつ / ナニゴダカシラベルーノ https://ginpen.com/lab/whatlang/ |
url | ginpen.com/lab/whatlang/ |
どうやらtext
の値を変更すれば良さそうです。
動的に変更する
iframe
で表示しているページはオリジンが異なるのでアクセスする事はできない(location.href
は触れない)が、iframe
要素オブジェクトのsrc
プロパティは読み書きが可能です。
取得できたら後は書き換えるだけですね。正規表現が楽で良いでしょう。
<span id="twbutton">(ここにボタン)</span>
// iframe要素とURLを取得 var elTwFrame = document.querySelector('#twbutton iframe'); var url = elTwFrame.src; // 任意の文章のボタンを表示するURLを生成 var nextUrl = url .replace(/([#&]text=)([^&]+)/, function(s, m1, m2) { return m1 + encodeURIComponent("任意の文章"); }); // URLを書き換え // ("#"以降の書き換えだと画面が再読み込みされずボタンが変わらないので、 // 一度別のURLに変更してから目的のものを設定する。) elTwFrame.src = 'about:blank'; setTimeout(function() { elTwFrame.src = nextUrl; }, 1);
setTimeout()
使うあたりがナンダカナーなので、もっと良いやり方あれば教えてください。Twitter側でそういうAPIあったりするのかな?