2009-04-29
■ [ニコニコ][その他]「またニコニコ動画見てる(0.3)」新プレイヤー向けパッチ

概要
上記が新プレイヤーでは動画時間が取れず、(00:00)のような出力になったり、またそもそも動かなくなったりしていたので、そのパッチ的なものを書いてみた。
(仮)インストール(5/20追記)
本家が修正されるまでは修正したものを置いておきます。自己責任でどうぞ。
こちらから→http://homepage3.nifty.com/hide32767/matanicovideo.user.js
説明
旧プレイヤーでは
document.getElementById('flvplayer').wrappedJSObject.GetVariable('ContentLength')
と言うコードで、Flashオブジェクトにセットされた動画の時間を取れていたが、これが新プレイヤーではnullが返ってくるようになった。
現在のwatchページでは、HTML内でVideoオブジェクトが定義されており、これのlength値に動画の時間が秒数で設定されているので、これを利用するようにした。
補記
greasemonkeyのユーザスクリプトから対象となるHTMLドキュメント内で定義されているオブジェクトを利用する際には、unsafeWindowオブジェクトまたはwindowオブジェクトの子オブジェクトとしてアクセスすればいいようです。以下参考リンク。
パッチ
*** matanicovideo.user.js 2009-04-30 02:56:22.000000000 +0900 --- matanicovideo.p.user.js 2009-04-30 02:56:40.000000000 +0900 *************** *** 6,11 **** --- 6,13 ---- // @version 0.3 // ==/UserScript== + var w = unsafeWindow || window; + (function(){ Number.prototype.z = function(len){ var s = '0'.fill(len) + this.toString(); *************** *** 49,55 **** var subject = h1.textContent; var url = location.href; ! var len = document.getElementById('flvplayer').wrappedJSObject.GetVariable('ContentLength').replace(/\D+/g, ''); var lmin = Math.floor(len / 60); var lsec = len % 60; --- 51,57 ---- var subject = h1.textContent; var url = location.href; ! var len = w.Video.length; var lmin = Math.floor(len / 60); var lsec = len % 60;
コメントを書く