素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

2008-04-01から1ヶ月間の記事一覧

リロードせずにはてなハイクを更新するGreasemonkey

追記:HatenaStarがちゃんと表示されるようにした。AutoPagerizeに対応するのは難しそうだから見送る。 // ==UserScript== // @name autoUpdate // @namespace http://d.hatena.ne.jp/javascripter/ // @description はてなハイクのエントリーをリロードせず…

XPathResultでもforEachとか使いたい

document.evaluateやった後が面倒くさすぎる。 Array.prototype.forEach.callとかが使えないから仕方なく作る。勢いでほかの反復メソッドも作る。XPathResult.prototype.every: XPathResult.prototype.every=function(callback,thisObj){ for(var i=0;i

Function.prototype.call()とFunction.prototype.apply()の使い方

関数を呼び出したとき、その関数がさすthisが引数の一つ目になるってこと。 んで、callの時はcallの引数の二つ目以降に、渡したい引数を一つずつ指定する。 applyの場合は二つ目の引数にいっぺんに渡したい引数を配列で指定する。具体的には console.log( Ar…

指定したユーザーのはてなハイクのエントリーを半透明にして目立たなくするGreasemonkey

// ==UserScript== // @name HaikuAbone // @namespace http://d.hatena.ne.jp/javascripter/ // @description 指定したユーザーを半透明にして目立たなくします。 // @include http://h.hatena.ne.jp/* // ==/UserScript== var users=[ 'user1', 'user2' ]/…

クロージャの続き

まだよくわかってないんだけど、グローバル空間を汚染せずに、関数を実行するたびに上書きされない変数を作れるもの?なのかな。たとえば、f()するたびにreturnされる値が一ずつ増えるものを作るとき。 var i=0; function f(){ return i++; } f(); f(); ダサ…

クロージャ

ってのはこういうことかな。 function f(){ var foo=new String; return { prev:function(){ return foo.substr(0,foo.length-1); }, next:function(){ return foo+='*'; } } } fizz=f(); console.log(fizz.next()); console.log(fizz.next()); console.log(…

カリー化

ってこういうこと? function f(a){ return function(b){ return function(c){ console.log(a,b,c); } } } f(3)(2)(1); f(3,2,1)でもできるようにするのは難しいなぁ。あきらめた。参考:カリー化 - Wikipedia

はてなハイクのエントリーの文字数をカウントするGreasemonkey

// ==UserScript== // @name 文字数カウント // @namespace http://d.hatena.ne.jp/javascripter/ // @description ハイクのしりとり向け // @include http://h.hatena.ne.jp/* // ==/UserScript== var hits=document.evaluate('//div[@class="body"]',docum…

pre要素をクリックしたらtextareaにする

var pres=Array.slice(document.getElementsByTagName('pre')); pres.forEach( function(pre){ pre.addEventListener('click', function(e){ var textarea=document.createElement('textarea'); textarea.value=pre.textContent; pre.parentNode.replaceChil…

ArrayじゃないものをArrayにする

var links=links=Array.slice(document.getElementsByTagName('a')); とか。 Arrayにするとどんないいことがあるかというと、たとえば画像へのリンクをFirebugのコンソールに列挙するときに var links=links=Array.slice(document.getElementsByTagName('a')…

getElementsBy〜のような関数の作り方

ハマった。 結論から行くと HTMLElement.prototype.$T=function(tagName){ return this.getElementsByTagName(tagName); }; document.$T=function(tagName){ return document.documentElement.$T(tagName); } document.$T('*'); document.body.$T('a'); 見た…

無名関数で再帰をする

alert( (function(m,n){ if(m%n==0) return(n); m%=n; return arguments.callee(n,m); })(36,8) ); 最大公約数をユークリッドの互助法で求めてalertで表示する。関数の再利用もできなくなるし見づらいしいいことなかった。

引数の数が不定な関数

argumentsオブジェクトを使えばいいみたい。とりあえず$('id1','id2');みたいにやるとヒットしたidを配列で返してくれる関数つくった。 $=function(){ var hits=[]; for(var i=0;i

IMEで未確定の文字列も取得できるようだ

keydown,keyup,keypressイベントは起こらないけど、変換途中の文字列もinput要素のvalueには入っているらしい。半角/全角キーを押したときだけではなく、新たに日本語を入力し始めるときも、keyCodeの229が呼ばれる。もしかしたら読み仮名取得とかができるか…

リンク禁止

if(document.referrer||window!=window.top||opener){ alert('アドレスバーに直接打ち込んでください') history.back(); }; 無断どこじゃなくてリンク自体禁止する

配列じゃないけど配列のように働くものもある

初めてのJavaScriptとか、JavaScript 第五版とかに書いてあったけど読んだときは意味が分からなかった。 やっと意味が分かった。 var foo=[1,2,3]; foo.forEach(function(s){alert(s)}); は動くけど var foo=document.getElementsByTagName('input'); foo.fo…

スペースでのスクロール量を変更する

こういうのはブラウザでやったほうがいいけど。無駄にCPU食うのはなんだろう。 var scrollLines=3; document.addEventListener('keydown',function(e){ if(e.keyCode==32){//Space window.scrollByLines((!e.shiftKey)?scrollLines:-scrollLines); e.prevent…

target="_blank"を削除する

var openNew=document.evaluate('//a[@target="_blank"]',document,null,7,null); for(var i=0;i

document.titleに時計。watchで変数を監視する。

途中でほかのスクリプトがdocument.titleを変えれるようにがんばった。LDRとかでもちゃんと動く。 var title=document.title; var time,now; setInterval( function(){ time=new Date(); now=' '+time.getHours()+':'+time.getMinutes()+':'+time.getSeconds…

document.getElementsBySelectorというライブラリを作ったので公開します。

CSSセレクタ版getElementsByTagNameみたいなものを作ったから公開します。document.getElementsBySelector('div.day pre[class="syntax-highlight"]')みたいな感じでやると結果が配列で返ってくる関数です。JQueryの$とか、CSSQueryとかみたいなものです。JQ…

qwをJavaScriptでやる

function qw(str){ return str.replace(/^\s+/,'').split(/\s+/); } qw('a b c d e') // =>[a,b,c,d,e] qw(' a b c d e e') // =>[a,b,c,d,e] 使い道ないけど。

CSSの有効、無効のトグルをするブックマークレット

javascript:var styleSheets=document.styleSheets; for(var i=0;i

MDCのドキュメントで日本語版がつくられていなかったら編集画面じゃなくて英語版に飛ぶようにするGreasemonkey

ページが見つかりません | Mozilla Developer Networkとかのプロパティのリンクとか、日本語訳が作られていないものはwikipediaみたいに編集画面に飛ぶようになってるけど、不便だから英語版のページに飛ぶようにする、というGreasemonkeyスクリプト。我なが…

はてなキーワードを無効にするGreasemonkey

AutoPagerize対応およびコードのブラッシュアップ。(追記が長くなったから先頭のほうに最新版を置いてる) removeKeywords.user.js: // ==UserScript== // @name removeKeywords // @author http://d.hatena.ne.jp/javascripter/ // @namespace http://d.ha…

ヒアドキュメント使ってCSSを追加

E4XというXMLをJavaScriptで使うための文法を使えばヒアドキュメントみたいなものができるらしい。 function addStyle(css){ var head=document.getElementsByTagName('head')[0]; var style=document.createElement('style'); style.setAttribute('type','t…

DOMのソースを見るブックマークレット

javascript:location.href="view-source:data:"+document.contentType+",<html>"+encodeURI(document.documentElement.innerHTML)+"</html>";void 0; ほぼ完全な形でDOMを見れる。けっこう便利。 javascript:location.href="view-source:data:"+document.contentType+";ch…

オンラインじゃなかったら警告する

addEventListener('offline',function(elem){ oldBody=document.body.innerHTML; document.body.innerHTML="<h1>オンラインにしてちょ。</h1>" },false) addEventListener('online',function(elem){ document.body.innerHTML=oldBody; },false) Firefox3で確認した。2…

Googleの検索結果から指定したサイトを目立たなくするGreasemonkey

はてブとかyoutubeとかニコニコとかを目立たなくする。googleBadList.user.js: // ==UserScript== // @name GoogleBadList // @namespace http://d.hatena.ne.jp/javascripter/ // @description Googleの検索結果から指定したものを目立たなくする // @inclu…

数値の読みを出力しようと思ったけど僕の技量ではぜんぜん歯が立たなかった

3時間くらいがんばってたけどぜんぜんできなかった。失敗した残骸を残しておく。いつの日かできるようにしてやるー。 function num2kana(n){ var keta=n.toString().length; var taisuu=['','まん','おく','ちょう','けい','がい','じょ','じょう','こう','…

パースエラーになったXHTMLを、HTMLとして解釈しなおすGrasemonkey

OperaではXHTMLとして解釈できなかった場合、HTMLとして解釈するかどうか選べるのだが、Firefoxではどうにもできないから作った。 前と同じくデータスキームに無理やり流し込んでるからうまくいかないページもあるかもしれない。 UTF-8で保存しないと文字化…