« ChromeでScrollar Anywhere Main 携帯向けの送信エラーメールを... »

ドットインストール用のGreasemonkeyスクリプト (2)

(過去の記事:←「ドットインストール用のGreasemonkeyスクリプト」)

作成したグリモンスクリプトを、「もしかしたらChromeでも動くかも?」と思って、Chromeの拡張を探していたら「NinjaKit」というのが見つかって、こちらで試していると自前で追加しているチェックボックスは表示されるものの、unsafeWindowなどが動作しない感じ。

動作は無理かと思っていたら、別で「Tampermonkey」という拡張が見つかってこちらだと動作した。
20140623121544

ただし、動画の自動再生がうまくいく場合といかない場合があり、どうもブラウザ立ち上げ時のloadイベントでは再生できるが、ページ再読み込み時のloadイベントでは動作しない感じ。このため、loadイベントへの割り当てを単にfunction(){}にするのでなく、setTimeout()で指定するようにしてみた。タイムアウトは500ms程度でも大丈夫そう。
[code]
@@ -31,3 +31,3 @@
if ($('#auto-play').prop('checked')) {
- addEventListener('load', function(){unsafeWindow.HMHM.movie.vimeo.player.playVideo();});
+ addEventListener('load', function(){setTimeout(function(){unsafeWindow.HMHM.movie.vimeo.player.playVideo();}, 500);});
}
[/code]

別で、GreaseKitというのも見つかったが、これはさらにNinjaKitよりも古いものだったようだ。

スクリプト

[code lang="javascript"]
// ==UserScript==
// @name DotInstallLessonAutoPlayAndComplete
// @namespace http://mechsys.tec.u-ryukyu.ac.jp/~oshiro/
// @include http://dotinstall.com/lessons/*/*
// @version ver.0.2
// @grant GM_getValue
// @grant GM_setValue
// @grant unsafeWindow
// @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// @require http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js
// ==/UserScript==

(function(){
// 動作切り替えチェックボックスの追加
$("#lesson-complete-button").parent().append('

')
.append('自動再生')
.append('自動完了チェック')
.append('全完了時に一覧へ');

// 動作設定の復帰と切り替え時の設定登録
$('#auto-play').prop("checked", GM_getValue('DotInstallAutoPlay', true));
$('#next-complete').prop("checked", GM_getValue('DotInstallNextComplete', true));
$('#return-list').prop("checked", GM_getValue('DotInstallReturnList', true));

$('#auto-play').change(function(){GM_setValue('DotInstallAutoPlay', $('#auto-play').prop("checked"));});
$('#next-complete').change(function(){GM_setValue('DotInstallNextComplete', $('#next-complete').prop("checked"));});
$('#return-list').change(function(){GM_setValue('DotInstallReturnList', $('#return-list').prop("checked"));});

// 動画の自動再生
if ($('#completeButtonLabel')[0].innerHTML.match(/^\s*完了\s*$/)) { // 未完了(「完了」ラベルがある)なら
if ($('#auto-play').prop('checked')) {
addEventListener('load', function(){setTimeout(function(){unsafeWindow.HMHM.movie.vimeo.player.playVideo();}, 500);});
}
}
// 「次へ」ボタンの動作
$('#lesson-complete-button').next().click(function() {
var href = $(this).attr('href');
if ($('#return-list').prop('checked') && $(this).hasClass('disabled')) {href = window.location.href.replace(/[^/]+$/, '');} // 最後のリンクではレッスン一覧へ

if ($('#completeButtonLabel')[0].innerHTML.match(/^\s*完了\s*$/) && $('#next-complete').prop('checked')) {
unsafeWindow.$('#lesson-complete-button').click();
//alert('完了しました!');
}
if (!$('#lesson-complete-button').next().hasClass('disabled') || $('#return-list').prop('checked')) {
setTimeout(function(){window.location=href;}, 800); // レッスンの「完了」操作が終わるくらいまで待って移動
}
return false;
});
})();
[/code]

Leave a comment

Your comment