Hatena::Groupnicovideo

にわかな奴の砂場

    使えそうなものがあれば適当にどうぞ。(自己責任的な意味で) 過去ログ

2009-04-29

[][]「またニコニコ動画見てる(0.3)」新プレイヤー向けパッチ 03:15 「またニコニコ動画見てる(0.3)」新プレイヤー向けパッチ - にわかな奴の砂場 を含むブックマーク はてなブックマーク - 「またニコニコ動画見てる(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;