またOperaでニコニコ動画見てる

「またニコニコ動画見てる」とTwitterに投稿するリンクを作成するGMスクリプトバージョン0.2 - むぅもぉ.jpOperaでも。
Twitterの仕様上使えなくなったので、代わりにTwitterへのリンク(status付き)を設置するだけのシンプルなScriptに修正

http://ss-o.net/userjs/mata.opera.de.nicovideo.js

実は2週間前にはできてたんだけど、どうにかしてOperaやSleipnir+SeaHorseで「またニコニコ動画見てる」を作れないか - むぅもぉ.jpみてそのことを思い出した。


クロスドメイン問題をどうやって解決しているのかポイントを解説。
要はニコニコとTwitterの両方で同じスクリプト読み込み、それぞれにデータの作成とデータのPOSTを分担させる方法です。。
以下、その流れ。

  • ページを開いたらとりあえずiframe作成。iframeのsrcはTwitterのupdate APIで、hashにPOSTしたいデータをつけておくことでTwitter側にPOSTしたいデータを渡す。
  • Twitter側で上記のデータつきURLに対応する「また見てる」ボタンを(iframeの中に)表示する。
  • ボタンを押すとhashを元にPOSTするデータを作って、(promptで一応確認しつつ適当にコメントつけてみたりして、)POSTする。
  • iframeはtwitter.comドメインなので、問題なくPOSTできる。


ただし、この方法ではTwitter側のScriptがCSRFになりかねない問題がある。
ので、document.referrerを見て、ニコニコから来てるか確認している。


いつの間にか本家のバージョンが上がっているので、あとで対応する。あと、Safariでも動くか確認しよう。SeaHorse対応はid:monjudohに期待。

はてなスターの星をプロフィールアイコンに置き換えるGreasemonkey Scriptメンテナンス更新

Firefox3対応版はgis?t 始めました - 0xFFからどうぞ
はてなスターの星をプロフィールアイコンに置き換えるGreasemonkey Script - 0xFFを更新しました。
単に無駄なコードを削っただけですが、以前のバージョンは引用が表示されないバグがあったりしたのでアップデート推奨です。

http://ss-o.net/userjs/replaceStarByProfileIcon.user.js

// ==UserScript==
// @name           replace star by profile icon
// @namespace      http://ss-o.net/
// @include        http://*.hatena.ne.jp/*
// @checkurl       http://ss-o.net/userjs/replaceStarByProfileIcon.user.js
// @version        1.1
// ==/UserScript==
(function(unsafeWindow){
  if (unsafeWindow && unsafeWindow.Hatena && unsafeWindow.Hatena.Star){
    var bindStarEntry = unsafeWindow.Hatena.Star.Entry.prototype.bindStarEntry;
    unsafeWindow.Hatena.Star.Entry.prototype.bindStarEntry = function(se){
      var self = this, stars = [];
      for (var i = 0,len = se.stars.length; i < len; i++) {
        var star = se.stars[i];
        if (star.name) {
          var img = unsafeWindow.Hatena.User.getProfileIcon(star.name);
          //img.src = img.src.replace(/\/profile_s/,'/profile');img.width = img.height = 64;
          img.alt = star.name;
          if (!star.img) star.img = img;
        }
        stars.push(star);
      }
      se.stars = stars;
      bindStarEntry.call(self, se);
    }
    var showName = unsafeWindow.Hatena.Star.Star.prototype.showName;
    unsafeWindow.Hatena.Star.Star.prototype.showName = function(e){
      this.screen_name = this.name;
      showName.call(this,e);
    };
  }
})(this.unsafeWindow||window);

コメントアウトしてるところを有効にすると、ユーザーアイコンを拡大する Bookmarklet - イン殺 - xxみたいにアイコンが大きくなります。64pxはやり過ぎですが、ちょっと面白いです。

マウスオーバーしたときにidが表示されなくなっていたので一応修正。