はてなキーワード: greasemonkeyとは
Google Readerをリスト表示で使っており、タイトルの先頭にPRとかADとか入ってるエントリを見えなくしたい人。
次のGreasemonkeyを使用する。まずはグリモン本体と右記をインストール。Google Reader Remove Ads for Greasemonkey
このままではエラーが出て動かないのでスクリプトを修正する。修正するにはFirefoxの右上にある猿(Greasemonkey)のアイコンの右にある下矢印をクリック→「ユーザスクリプトの管理」をクリック→「Google Reader Remove Ads」の「設定」をクリック→「このユーザスクリプトを編集します」をクリックするとエディタで「Google Reader Remove Ads」のスクリプトが表示されるのでそれを編集する。
以下に修正点を示す。個々の修正点のタイトルはその行が何行目にあるかを示している。
なおこの修正では、Google Reader Remove Adsの機能の内切り捨てているものもある。そのことをご了承の上、お使いいただきたい。
var title_anc = div.getElementsByClassName('entry-title-link')[0];
to
var title_anc = div.getElementsByClassName('entry-title')[0];
if (title_anc.text.search(title_prefixes[i]) == 0) {
to
if (title_anc.textContent.search(title_prefixes[i]) == 0) {
var msg = 'Hide "' + title_anc.text + '(' + title_anc.href + ')"';
to
var msg = 'Hide "' + title_anc.textContent;// + '(' + title_anc.href + ')"';
check_body(divs.snapshotItem(i));
to
//check_body(divs.snapshotItem(i));
以下を全てGoogle Reader上で行いたい。
タイトルをクリックしたら自動的に全文を取得して表示して欲しい。以下の設定を行うと出来る。
ブコメが表示されないので、これを直したい。
id:northappleさんが「googleリーダー内ではてなブックマークのコメントを参照したいで.. - 人力検索はてな」という質問の回答及びコメント欄でこれを直す方法を教えてくれている。よって、その通りに変更すると直る。2ヶ所置換が必要。
以下、Google Reader plus Hatenaの変更点です。変更するには、Firefoxの右上にある猿(Greasemonkey)のアイコンの右にある下矢印をクリック→「ユーザスクリプトの管理」をクリック→「Google Reader plus Hatena」の「設定」をクリック→「このユーザスクリプトを編集します」をクリックするとエディタで「Google Reader plus Hatena」のスクリプトが表示されるのでそれを編集する。
62行目
mySpan.innerHTML = '<a href="http://b.hatena.ne.jp/entry/'+url+'" onClick="window.open(this.href,\'\',\'status=yes,scrollbars=yes,directories=yes,menubar=yes,resizable=yes,toolbar=yes\'); return false;" ><img src="'+ BookmarkImageURL +'" /></a>';
を、
mySpan.innerHTML = '<a href="http://b.hatena.ne.jp/my/add.confirm?url='+url+'"><img src="'+ BookmarkImageURL +'" /></a>';
に変更。これで「○○ users」をクリックすると、目的のウィンドウが開くようになる。
147行目
var t = bookmark.timestamp.split(" ")[0].split("/");
を、
var t = bookmark.timestamp;
に変更。
156行目、
html += "<li><span class=\"__hatena_bookmark_anywhere_timestamp\">"+escapeHTML(t[0])+"年"+escapeHTML(t[1])+"月"+escapeHTML(t[2])+"日</span><img src=\"http://www.hatena.ne.jp/users/"+escapeHTML(bookmark.user.substring(0,2))+"/"+bookmark.user+"/profile_s.gif\" width=\"16\" height=\"16\"><a href=\"http://b.hatena.ne.jp/"+escapeHTML(bookmark.user)+"/"+escapeHTML(t.join(""))+"\" class=\"hatena_bookmark_anywhere_user\">"+escapeHTML(bookmark.user)+"</a><span class=\"hatena_bookmark_anywhere_tags\">"+tags.join(", ")+"</span>"+escapeHTML(bookmark.comment)+"</li>";
を、
html += "<li><span class=\"__hatena_bookmark_anywhere_timestamp\">"+escapeHTML(t.slice(2,-3))+"</span><img src=\"http://www.hatena.ne.jp/users/"+escapeHTML(bookmark.user.substring(0,2))+"/"+bookmark.user+"/profile_s.gif\" width=\"16\" height=\"16\"><a href=\"http://b.hatena.ne.jp/"+escapeHTML(bookmark.user)+"/"+escapeHTML(t.split(" ")[0].split("/").join(""))+"#bookmark-"+escapeHTML(json.eid)+"\" class=\"hatena_bookmark_anywhere_user\">"+escapeHTML(bookmark.user)+"</a><span class=\"hatena_bookmark_anywhere_tags\">"+tags.join(", ")+"</span>"+escapeHTML(bookmark.comment)+"</li>";
に変更。
# ブコメのはてなスターを取得しやすいように、ブコメのリンクもブコメのパーマリンクへ変更してあります。
を、
var evt = document.createEvent( "MouseEvents" ); evt.initEvent( "click", false, true ); createSpan.dispatchEvent( evt );
に変更。(「 JavaScriptの動かないコード (中級編) clickイベントを強制的に発生させたい (fireEvent/createEventの使い方) - 主に言語とシステム開発に関して」を参考にさせて頂きました。)
出来た。けど、めちゃくちゃソースが汚いので、差分として公開するのが難しい。ごめんなさい。
Greased Lightboxとは画像リンクをクリックするとページを移動することなくリンク先の画像を見ることができるという便利なユーザースクリプトである。たぶんGreasemonkey上で動くからGreasedという名前なのだろう。ちなみにOperaでも使える。
でGreased Lightboxが動作すると画像以外は暗くなり、画像が見やすくなるのだが黒いPC画面というのはあまり見たいものではない。画像の後ろに自分の顔が映ると萎える。というわけでこの黒い半透明の背景を白くしようと思った。
とりあえずgreasedlightbox.user.jsの色を表している部分を全部白にしてみたが背景は変わらなかった。どうやら背景は色を指定して表示しているのではなく、画像を直接指定して表示しているらしい。その画像を表す部分を見つけた。
var pngOverlay= "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAPSURBVHjaYmJgYDgDEGAAANsAz1TKIeAAAAAASUVORK5CYII%3D')";
これを見るとbase64がカギを握っていそうだ。Wikipediaによると
Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。
ということらしい。意味不明の文字列が半透明の黒い画像を表しているということだろう。ということは半透明の白い画像を表す文字列と置き換えれば背景を変えることができる。というわけでGIMPを使って白い色の透過PNG(1px四方)を作った。 次にこのページ( http://sveinbjorn.org/dataurlmaker )でその画像を文字列(Base64形式)に変えた。そしてgreasedlightbox.user.jsの先程の文字列と置き換えた。
変更前
var pngOverlay= "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAPSURBVHjaYmJgYDgDEGAAANsAz1TKIeAAAAAASUVORK5CYII%3D')";
変更後
var pngOverlay= "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDHg0AJ+6ZOggAAAANSURBVAjXY/j//38kAAlVA1faOaSqAAAAAElFTkSuQmCC')";
こうしてGreased Lightboxの背景が白い半透明になった。かなり薄めだがGreased Lightboxが動作していると分かればいいのでこの程度の濃さで充分かな。
Greasemonkeyが0.9にアップデートされてから?かどうかは分からないけどAutoPagerizeやLDRizeが動かなくて困った。
エラーコンソールを見たらVimperatorプラグインのldrize_cooperation.jsの
GreasemonkeyService = Cc["@greasemonkey.mozdev.org/greasemonkey-service;1"].getService().wrappedJSObject; this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,codebase,sandbox){ if(sandbox.window.LDRize != undefined &amp;&amp; sandbox.window.Minibuffer != undefined){
でエラーになっていた。
greasemonkey.jsをみてみたら
evalInSandbox: function(code, sandbox, script) {
で0.8のgreasemonkey.jsは
evalInSandbox: function(code, codebase, sandbox, script) {
だった。
- this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,codebase,sandbox){ + this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,sandbox,script){
したらAutoPagerizeは動くようになった
LDRizeはこれでもまだ動かない。Vimperatorを無効にしても同じ。
どうやらGreasemonkey 0.8ではMinibufferでのwindowとLDRizeでのwindowが同一のXPCNativeWrapperオブジェクトだったけど0.9では別のオブジェクトになったようだ。だからLDRizeでのwindow.MinibufferもundefinedになるしGM_MinibufferLoadedのイベントリスナーを設定してもwindowが違うから発行されないということみたい
ううむ
追記
0.9.0から0.9.1の間のこの変更が原因ぽい…
https://github.com/greasemonkey/greasemonkey/commit/6a4ffd52c90091714e6f49376ef07e2ce5009f79
例えば、autopagerizeでpage1, page2, page3とページングされるべきところなのに、
page1, page2, page2などと実行される人や、
niconicofavlistでニコ動のお気に入りマイリストのコンテナが二個も表示される人へ。
↓
どうも、AVG Safe Searchが最新Firefoxと相性が悪い模様。
FirefoxにインストールされているGreasemonkeyスクリプ - ブラウザ - 教えて!goo
http://oshiete.goo.ne.jp/qa/6283865.html
の回答5にもあるが、AVG Safe Searchを無効にしたら治った。
↓
動作から推測するに、AVG Safe Searchは一定時間ごとに何らかのチェック動作を行うらしい。
これがGreasemonkeyの動作と相性が悪いらしい。
さてどこから消すか
Twitter の OAuth 許可ページがあまりにも酷い => 応急処置 - リタマス
これのGreasemonkey スクリプトが危険だったので修正したよ!
このスクリプトは、本文中にupdate(または更新)が入っている時に警告を出すようになっていたんだけど、これだとチェック漏れのバグがあるとwrite権限を要求しているのに警告が出ないのでread onlyのように見えてしまう
人間が本文読めばわかるから大丈夫だろと思うかもしれないけど、このスクリプト使い続けていたら警告が出ない=read onlyだと判断して本文読まなくなるはず
read onlyの時にも色を変えて警告を出すようにした(writeなら赤、read onlyなら黄)
これで警告表示の色を見れば赤ならwrite黄ならread onlyだとすぐにわかるし、警告がでなかったらなんかおかしいとすぐに気づくはずだ
危険なものと安全なものが混ざってる中から危険なものを選り分けても安心はできないけど、安全なものを選り分けたんなら安心できるよね!(これなんか専門用語ありそうだけど僕は知らない
最初のスクリプトだと https://twitter.com/oauth/authorize?* と https://twitter.com/oauth/authenticate?* で動くようになってたけど、
twitterのOAuthの認証ページは他にもhttpsのかわりにhttpを使ったものとか、twitter.comのかわりにapi.twitter.comとかがあるから、それらのページでは警告が出なかった
delicious 2.0 Thumbs for Greasemonkey
LivedoorブログをGreasemonkeyのgoogle reader full feedを使って本文読もうとするとすごい勢いで文字化けするなぁ。
全部↑に出てくるFFFDという記号になる。
文字コードとかよく分からないけど他のページは問題ないのに。
自分の普段の生活の中で、小さな不満はないだろうか?
例えばあそこのサイトはここがこうだったら使いやすいのに。とか。
毎日やるこの作業をもっと楽にできるようにはならないかな?とか。
そういう時にGreasemonkeyとかエディタやExcelのマクロを作ってみたらいいんじゃなかろうか。
最初の目標は小さいほうがすぐに結果が見えるのでいいと思う。
ちゃっちゃか見たいから勝手にいじった。
・2chブラウザで開く https://addons.mozilla.org/ja/firefox/addon/11022
・Adblock Plus https://addons.mozilla.org/ja/firefox/addon/1865
・All-in-One Sidebar https://addons.mozilla.org/ja/firefox/addon/1027
・Better YouTube https://addons.mozilla.org/ja/firefox/addon/6460
・Check4Change https://addons.mozilla.org/ja/firefox/addon/3028
・Context Search https://addons.mozilla.org/ja/firefox/addon/240
・Video DownloadHelper https://addons.mozilla.org/ja/firefox/addon/3006
・dragdropupload https://addons.mozilla.org/ja/firefox/addon/2190
・FireGestures https://addons.mozilla.org/ja/firefox/addon/6366
・FoxTab https://addons.mozilla.org/ja/firefox/addon/8879
・Google Toolbar for Firefox http://www.google.com/tools/firefox/toolbar/FT2/intl/ja/
・Greasemonkey https://addons.mozilla.org/ja/firefox/addon/748
・Hatena Bookmark https://addons.mozilla.org/ja/firefox/addon/11285/
・IE Tab https://addons.mozilla.org/ja/firefox/addon/1419
・IE View https://addons.mozilla.org/ja/firefox/addon/35
・Japanize http://japanize.31tools.com/
・Menu Editor https://addons.mozilla.org/ja/firefox/addon/710
・Resizeable Textarea https://addons.mozilla.org/ja/firefox/addon/3818
・ScrapBook https://addons.mozilla.org/ja/firefox/addon/427
・Screengrab https://addons.mozilla.org/ja/firefox/addon/1146
・User Agent Switcher https://addons.mozilla.org/ja/firefox/addon/59
・テキストリンク (Text Link) https://addons.mozilla.org/ja/firefox/addon/1939
・ブックマークを新しいタブで開く (Open Bookmarks in New Tab) https://addons.mozilla.org/ja/firefox/addon/13784
Greasemonkeyスプリクト
・AutoPagerize http://autopagerize.net/
・Loopy for YouTube http://userscripts.org/scripts/show/28832
前誰かがトラックバック展開してくれるブックマークレット作ってくれてました。
Greasemonkey化できそうだけどめんどくさいから各自でどうぞ。
javascript:(function(){var%20as=document.getElementsByTagName('a');for(var%20i=0;i<as.length;i++){var%20a=as[i].getAttribute('onclick');if(a&&a.indexOf('toggleTBC')>=0)toggleTBContent(a.match(/\d+/)[0]);}})()
追記
登録の際は適宜訂正願います
一応はまったところをメモしとこ
http://d.hatena.ne.jp/os0x/20071202/oautopagerize
・for Operaじゃなくてfor GreaseKit/Greasemetal/Chromium Greasemonkeyのファイル3つをインストール
・0AutoPagerize.Settings.jsの実行禁止ページは↓のようにカンマ(,)区切りすること
,DISABLE_SITE:[ 'http://h\\.hatena\\.ne\\.jp/', 'http://d\\.hatena\\.ne\\.jp/' ]
□Firefox用拡張機能「Greasemonkey」、Google Chromeに対応 - CNET Japan
http://japan.cnet.com/news/media/story/0,2000056023,20382295,00.htm
http://anond.hatelabo.jp/20090611195327
javascriptが全然分からないのでググりまくってなんとかできた。
XPathで要素の指定をもうちょっとなんとかするとか、今後の課題は多い。
あと、ugigiの検索結果をAutoPagerで自動的に読み込むようにしようと挑戦してみたものの挫けたよ。
どのようにnextlinkを指定すれば上手く行くのだろう。
// ==UserScript== // @name ugigi link test // @namespace http://anond.hatelabo.jp/ // @include http://ugigi.dvrdns.org/?* // ==/UserScript== var sakuhin = document.getElementsByClassName('sakuhin'); for (var i = 0; i < sakuhin.length; i++) { var relatedurl = unescape(sakuhin[i].getElementsByClassName('link')[0].childNodes[0].href); var siteinfotext = sakuhin[i].getElementsByClassName('sinfo')[0].getElementsByTagName('a')[0].text; var linkurl = genurl(relatedurl, siteinfotext); if (linkurl != null) { var a = document.createElement('a'); a.textContent = 'Link'; a.href = linkurl; var title = sakuhin[i].getElementsByClassName('title')[0]; title.appendChild(a); } } function genurl(relatedurl, siteinfotext) { match = relatedurl.match(/\/([a-z_]+)(\d*)\/(\d+$)/); var board = match[1]; var boardnum = match[2]; var idnum = match[3]; var lognum = siteinfotext.match(/\d+$/); var url; switch (board) { case 'ssw_l': url = 'http://coolier.sytes.net:8080/sosowa/ssw_l/?mode=read&amp;key=' + idnum + '&amp;log=' + lognum; break; case 'ssw_p': url = 'http://coolier.sytes.net:8080/sosowa/ssw_p/?mode=read&amp;key=' + idnum + '&amp;log=' + lognum; break; case 'compe': url = 'http://www10.atpages.jp/thcompe/compe' + boardnum + '/?mode=read&amp;key=' + idnum + '&amp;log=0'; break; case 'yotogi': url = 'http://yotogi.com/yotogi/?mode=read&amp;key=' + idnum + '&amp;log=' + lognum; break; case 'comp': var nechocompenum = siteinfotext.match(/[一二三四]/); switch (nechocompenum[0]) { case '一': url = 'http://easy2life.sakura.ne.jp/necho/comp/anthologys.cgi?action=html2&amp;key=' + idnum; break; case '二': url = 'http://easy2life.sakura.ne.jp/necho/comp2/anthologys.cgi?action=html2&amp;key=' + idnum; break; case '三': url = 'http://green.ribbon.to/~ronron/comp/?mode=read&amp;key=' + idnum + '&amp;log='; break; case '四': url = 'http://green.ribbon.to/~ronron/comp4/?mode=read&amp;key=' + idnum + '&amp;log=0'; break; default: url = null; break; } break; default: url = null; break; } return url; }