ラベル Greasemonkey の投稿を表示しています。 すべての投稿を表示
ラベル Greasemonkey の投稿を表示しています。 すべての投稿を表示

2010年5月14日金曜日

[Greasemonkey] YouTubeの検索キーワードリストをいったん消すスクリプト

YouTubeの再生ページを開いたとき、検索窓に文字が入っているとキーワード候補のリストが出るのですが、再生画面にかぶってうっとおしいんですわ。こんな感じです。

どっか他の部分をクリックすりゃ消えるので、それで済む事なんですがどうにも興醒めなので、ついカッとなって、ページを開いた時にリストをいったん消すスクリプトを書きました。ページを開いた時に一度消すだけなので、サジェスト機能自体は有効です。いつもと同様、GitHubに上げていますので、ご入用の方はどうぞ。youtube_hidesuggestion.user.js
// ==UserScript==
// @name youtube_hidesuggestion
// @namespace
// @description ウィンドウを開いた時に検索窓のサジェストが再生画面にかぶってしまうので、いったん消しておくスクリプト
// @include http://*youtube.com/watch*
// @version 0.1.0
// @author outZider
// ==/UserScript==
document.addEventListener("DOMNodeInserted", function(e) {
if (e.target.tagName == "TBODY") {
document.getElementById("completeTable").style.display = "none";
setTimeout(function() {
document.getElementById("completeTable").innerHTML = "";
document.getElementById("completeTable").style.display = "";
}, 1000);
document.removeEventListener("DOMNodeInserted", arguments.callee, false);
}
}, false);

2010年5月6日木曜日

[Greasemonkey] YouTube ダウンロードリンク表示スクリプトを改良しました

以前、間に合わせで書いたスクリプトなんですが、ファイル名にタイトルが自動的に入るようにしました。コピペする手間やファイル名として使えない文字を気にする必要が無くなったので、個人的には気に入ってます。いつもと同様GitHubに上げておりますので、人柱上等な方はこちらからどうぞ。youtube_adddownloadlinks.user.js

リンクをクリックするだけでセーブが行われます。これまでの「右クリック→別名でリンク先を保存」だとタイトルがファイル名に入らないので注意して下さい。なお、ファイル名として利用出来ない文字はアンダースコア(_)に変換されます。

以下、技術面に関していくつか
  • このハックは基本的に、ダウンロードを本来のダウンロード処理ではなくXMLHttpRequestを自前で発行する事で処理し、その上でdocument.location.hrefを捏造する事でセーブ時のファイル名を変更するというものです。
  • どういうわけか、GM_xmlhttpRequestでないと、この挙動を引き出せないようで、new XMLHttpRequest()で作成したリクエストでは駄目でした。このことからも想像が付きますがSafari+GreaseKitでは残念ながら上手く動作しません。
  • readyState==2|3の場合は一旦abort()を呼んでいますが、これはreadyState==4だけを待つようにすると、ダウンロードが完了するまでずっと待たされるハメになるからです。当たり前といえば当たり前なのですが、最初、onloadで処理してハマってしまいましたので、老婆心ながら一応。

2010年4月2日金曜日

[Greasemonkey] YouTube ダウンロードリンク表示スクリプト


yagarさんのスクリプトが対応するまでの繋ぎということで、とりあえず動くところまでざっくりと。エラーチェックってなに?それおいしいの?ということでGitHubに上げておきました。人柱上等な方はどうぞ。youtube_adddownloadlinks.user.js
// ==UserScript==
// @name YouTube_AddDownloadLinks
// @namespace
// @description Adding download links above the player region.
// @include http://*youtube.com/watch*
// @version 0.1.0
// @author outZider
// ==/UserScript==
(function() {
var formats = [
{fmt: 37, dsc: "MP4(HD1080p H.264/AAC)", available: false},
{fmt: 22, dsc: "MP4(HD720p H.264/AAC)", available: false},
{fmt: 18, dsc: "MP4(iPod H.264/AAC)", available: true},
{fmt: 35, dsc: "FLV(高 H.264/AAC)", available: false},
{fmt: 34, dsc: "FLV(低 H.264/AAC)", available: false},
{fmt: 6, dsc: "FLV(高-old H.263/MP3)", available: false},
{fmt: 5, dsc: "FLV(低-old H.263/MP3)", available: true},
{fmt: 17, dsc: "3GP(高 MPEG4/AAC)", available: true},
{fmt: 13, dsc: "3GP(低 H.263/AMR)", available: true}
];
var t = "", video_id = "";
var flashvars = document.evaluate("id('movie_player')", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var args = flashvars.snapshotItem(0).getAttribute("flashvars").split("&");
for (var i = 0; i < args.length; i++) {
if (args[i].match(/^t=/)) {
t = args[i].split("=")[1];
}
else if (args[i].match(/^video_id=/)) {
video_id = args[i].split("=")[1];
}
else if (args[i].match(/^fmt_url_map=/)) {
var fl = decodeURIComponent(args[i].split("=")[1]).split(",");
for (var j = 0; j < fl.length; j++) {
var v = parseInt(fl[j].split("|")[0]);
for (var k = 0; k < formats.length; k++) {
if (formats[k].fmt == v) {
formats[k].available = true;
}
}
}
}
}
var al = document.createElement("div");
al.style.padding = "4px";
al.style.MozBorderRadius = "6px";
al.style.backgroundColor = "#ddd";
var ht = "";
for (var i = 0; i < formats.length; i++) {
if (formats[i].available) {
ht += "<a href='http://" + location.host + "/get_video?video_id=" + video_id + "&t=" + t + "&fmt=" + formats[i].fmt + "'>" + formats[i].dsc + "</a>";
}
else {
ht += "<font color='#bbb'>" + formats[i].dsc + "</font>";
}
ht += "&nbsp;&nbsp;";
}
al.innerHTML = ht;
document.getElementById("watch-headline").appendChild(al);
})();

2010年1月1日金曜日

[Greasemonkey] 千夜千冊の該当ページを開くスクリプト

連環篇になってから運営形態が変わったようで「1337夜」といった千夜千冊サイト内リンクは、公開後少したってからリンクが張られるようになったようだ。そういったリンクは連環リンクとして最後にまとめてあるし、少し待てばリンクも張られるようなのだが、それまでの繋ぎということで、書初めにも丁度良いのでグリモンのスクリプトを書いた。

やっていることは単純で「マウスで数字を選択してから Shift+Ctrl+クリックまたは Shift+右クリックすると千夜千冊の該当ページが開く」というもの。テキストの数字をダブルクリックすると数字部分だけ選択出来るので、そのまま Shift+Ctrl+クリックすればOK。前後に余計なものが入ってもmatch(/¥d+/)で取り除いているので選択はある程度大雑把でもいけるはず。全角半角処理やゼロ詰処理は車輪の再発明ぽいけど、まぁ書初めということで良しとしましょう。ちなみにaddEventListener('contextmenu')なので、Windowsでは Shift+右クリになるかと思われ。あと、ポップアップブロックをしていると最初の呼び出し(window.open)時に警告が出るので、許可してやればその後は出なくなります。

GitHubに上げましたので人柱上等な方はどうぞ。opensenya.user.js
// ==UserScript==
// @name opensenya
// @description 「1337夜」等の数字を選択して Shift+Ctrl+クリックまたは Shift+右クリックすると千夜千冊の該当ページが開きます。
// @include http://www.honza.jp/senya/1/matsuoka_seigow/*
// @version 0.0.5
// @author outZider
// ==/UserScript==

(function() {
function fz(num, digit) {
var s = String(num);
for (var i = 0; i < digit - String(num).length; i++) s = "0" + s;
return s;
}
window.addEventListener(
'contextmenu',
function(e) {
if (e.shiftKey) {
var selection = window.getSelection();
if (selection.rangeCount) {
var s = String(selection.getRangeAt(0)).replace(/[0-9]/g,
function (w) {
var z = "0123456789", h = "0123456789"; return h[z.indexOf(w)];
}).match(/\d+/);
if (s && (parseInt(s) != 0)) {
if (s < 1330)
window.open("http://www.isis.ne.jp/mnn/senya/senya" + fz(s, 4) + ".html"); // 放埒・遊蕩篇
else
window.open("http://www.honza.jp/senya/1/matsuoka_seigow/" + fz(s, 4)); // 連環篇
}
e.preventDefault();
}
}
},
true);
})();


2010/01/07 追記:
コンテクストメニューが使えなくなっていたので Shift+Ctrl+クリック または Shift+右クリックで開くように修正しました。上のリンク先は修正済みのもの(version 0.0.5)になってます。
ちなみに年明けの1339夜は最初からリンクが張られていますね。1338夜はまだリンクが張られていないところを見ると、年末進行で編集作業が忘れられていたと言うだけのことなのかな。

2009年2月22日日曜日

[Greasemonkey] SICPページャ

オンライン版のSICPをぽつぽつ読んでるんですが、next/previousリンクをクリックするのがダルいのでキーボードだけで読み進めるためのGreasemonkeyスクリプトを書きました。こういうのをちゃっちゃと作れるのがFirefoxのいいとこですな。GitHubに置いてありますので人柱上等な方はどうぞ sicp_pager.user.js