ニコニコ動画が9にバージョンアップしたことに伴い今回も
castor氏のseahorse版拡張マイリストがリストを表示してくれないどころか、ついに登録ボタンまでも消失してしまったため、またもや急遽自力で修正することに。
※ 冒頭の定義文の修正箇所が抜けていることを指摘されて修正しました(11/23) (蛇足)初めて受けたトラックバックが問題点の指摘という情けなさ。
それはともかくとして、この記事のトラックバック先で
より最適な修正案が出ているのでそちらもご参照ください。
【修正前】
// ==UserScript==
// @name NicoVideo Additional MyList (for SeaHorse)
// @namespace http://castor.s26.xrea.com/
// @description Save the movie list to local settings.
// @include http://www.nicovideo.jp/watch/*
// @include http://www.nicovideo.jp/my/my
// @type SleipnirScript
// @version 0.9.6.20081214sh
// @author castor
// ==/UserScript==
-----------------------------------------------------
(中略)
-----------------------------------------------------
function screenWatch() {
var mylist_add_submit = document.getElementById('mylist_add_submit');
if (mylist_add_submit) {
var input = document.createElement('input');
input.className = 'submit';
input.setAttribute('id', 'mylist_add_button_add');
input.setAttribute('type', 'button');
input.setAttribute('value', '拡張リストに登録');
input.style.cssText = 'margin-left:4px;';
input.attachEvent('onclick', addMyList);
if (!document.getElementById('mylist_add_button_add')) {
mylist_add_submit.parentNode.appendChild(input);
mylist_add_submit.parentNode.style.cssText = 'white-space:nowrap;';
}
}
-----------------------------------------------------
(中略)
-----------------------------------------------------
function screenMylist() {
// Additional List (Header)
var div = document.createElement('div');
div.setAttribute('id', 'mylist_additional');
div.setAttribute('width', '100%');
div.appendChild(makeListHeader()); // header
div.appendChild(makeListSubHeader()); // sub-header
div.appendChild(makeListBody()); // body
var pos = 0;
var a = document.getElementsByTagName('div');
for (var i=0; i
if (a[i].getAttribute('className') == 'tool_tit_bg') {
if (++pos == 2) {
var m = a[i];
m.parentNode.insertBefore(div, m);
break;
}
}
}
/*
(中略)
/*
(後略)
}
【修正後】
// ==UserScript==
// @name NicoVideo Additional MyList (for SeaHorse)
// @namespace http://castor.s26.xrea.com/
// @description Save the movie list to local settings.
// @include http://www.nicovideo.jp/watch/*
// @include http://www.nicovideo.jp/my/mylist
// @type SleipnirScript
// @version 0.9.6.20081214sh
// @author castor
// ==/UserScript==
-----------------------------------------------------
(中略)
-----------------------------------------------------
function screenWatch() {
var mylist_add_submit = document.getElementById('BTN_add_deflist');
if (mylist_add_submit) {
var input = document.createElement('input');
input.className = 'submit';
input.setAttribute('id', 'mylist_add_button_add');
input.setAttribute('type', 'button');
input.setAttribute('value', '拡張リストに登録');
input.style.cssText = 'margin-left:4px;';
input.attachEvent('onclick', addMyList);
if (!document.getElementById('mylist_add_button_add')) {
mylist_add_submit.parentNode.insertBefore(input, null);
mylist_add_submit.parentNode.style.cssText = 'white-space:nowrap;';
}
}
-----------------------------------------------------
(中略)
-----------------------------------------------------
function screenMylist() {
// Additional List (Header)
var div = document.createElement('div');
div.setAttribute('id', 'mylist_additional');
div.setAttribute('width', '100%');
div.appendChild(makeListHeader()); // header
div.appendChild(makeListSubHeader()); // sub-header
div.appendChild(makeListBody()); // body
(削除)
var a = document.getElementsByTagName('div');
for (var i=0; i
for (var i=0; i
if (a[i].className == 'alert_box') {
var m = a[i];
m.insertBefore(div, null);
break;
}
}
}
/*
(中略)
/*
(後略)
}
問題点・変更点は赤字で強調してます。
現状残る問題点は
・拡張マイリストのデザインの崩れ
・登録ボタンを押したときにバルーンが表示されない(ページ最下部に結果は出る)
の二つなんですが、まあ動作さえすればとりあえずいいやってことで正式対応は本家をお待ちください。
今回は誰か先にやってないかと思って検索してみたら
ニコニコユーザ掲示板でGreasemonkey版への対応が書き込まれていたので、それを参考にして前回よりはだいぶ楽に修正できました。前回の修正では試していなかったので気付かなかったんですが、動画視聴ページではソースコードの表示が不許可になっているらしく、DLして開いてみても文字化けの嵐でidの特定に手間取っていたんですが、先の掲示板にあった修正案に挿入ターゲットのidが記載されていたので、それで事なきを得ました。あれがなかったら死んでいたぜ。
あ、ちなみに今回もこの修正案を適用すると、拡張マイリストはとりあえずマイリストの上部に埋め込まれることになります。これは通常のマイリストを最早ほとんど使っていない僕にとってその方が使いやすいことと、ニコニコ自体のHTML構造がかなりdiv要素を多用した入れ子型になっているため、それに対応しようとするとソースコードを少し煮詰め直さなければならなくならず、そんな面倒なことはできないという理由からです。それでも良ければご活用ください。あと、今回の記事で言ってることが意味わかんねえようなら、まずはjavaを勉強してから今回使用されてるseahorseの構文をちょちょいと検索すればたぶんわかるようになるはずです。くれぐれも、コード修正前にマスターのコピーを退避しておくことを忘れずに。
PR