【BBasmz】ヤーデ54追加!ツイートボタンを押すと現在装備中のURLを出力するようになりました(制限あり)
ヤーデ54追加!ツイートボタンを押すと現在装備中のURLを出力するようになりました(制限あり)
http://expz.net/bbasmz/
http://expz.net/bbasmz/?p=I1I1I1I111111111111111111111111111111111
●ヤーデ54は現在まだ未実装ですが、アセン検証用として追加しました。
●ツイートボタンを押すと現在装備中のURLを出力するようになりました(制限あり)
制限とは、ボタンを押した時に、twitter投稿用のポップアップブロックが発動することがあります。ポップアップブロック解除すれば普通に使えると思います。
なんでこんなことになっているかというと、クロスサイトスクリプティング対応策をとっているのですね。
BBasmzのサイトから、twitterのサイトを呼び出している処理なので「違うサイトですよ!なんか危なくないですか?!ポップアップブロックしますね!」っていう警告なんですね。ちなみに、chromeだと処理を実行したときは下のようなエラーが出ます。
Unsafe JavaScript attempt to access frame with URL http://expz.net/bbasmz/test/ from frame with URL http://platform.twitter.com/widgets/tweet_button.1366232305.html#_=13671290…A%2F%2Fexpz.net%2Fbbasmz%2F%3Fp%3D1411111111111111111111111111111111111111. The frame requesting access set 'document.domain' to 'twitter.com', but the frame being accessed did not. Both must set 'document.domain' to the same value to allow access.
どうにかこれを外す方法ないかと試していたんですが、それよりボタンを押した時に「ああURL出力忘れてた…めんどいわ…」というガッカリを無くすほうが先かなと。いうことで(制限あり)として、実装しました。
あと、もうひとつ困っていたことがあって解決できたので記録しておきます。
twttr.widgets.load()で「Uncaught TypeError: Cannot call method 'load' of undefined」エラーが出てました。つまり「loadメソッドなんかねえよ」ってことで。load()は、tweetボタンの描画用メソッドで、URLパラメタ書き換わった次点で再描画を呼び出さないといけないので、すごい困りました!!!!1111
でぐぐったら下記がヒットしました。
Cannot update tweet button with AJax
https://dev.twitter.com/discussions/890
今回BBasmzで取った方法は、再描画ときにtwttr.ready()でload()を呼び出す方法ですね。一連流れは以下な感じです。
//tweet $('#buttonTweet').empty(); $('<a>') .attr('href', 'http://twitter.com/share') .attr('class', 'twitter-share-button') .attr('data-url', getOutputURL()) .attr('data-text', '【BBasmz】') .attr('data-count', 'none') .attr('data-lang', 'ja') .appendTo('#buttonTweet'); //twitterボタン再描画 twttr.ready(function() { twttr.widgets.load(); });
これマジでわかんなくて悩みましたわ…
と、いうことで!現場からは以上です!