Home > JavaScript Archive

[ << < 1  2  3 >> ]

JavaScript Archive

javascript だけで exif 情報取得

nihilogic: Reading EXIF data with Javascript

そのうちなんか作る

AutoPagerize と FreeStyleWiki と diary_navi と

LDRize の FSWiki 用 siteinfo 書いたことだし、Autopagerize もいるよな、ってことで、diary_navi の改造と、このサイトの Autopagerize 用 siteinfo。一部のマニアックな方はどうぞ

 ,{
  url:          'http://haro.jp/wiki/'
  ,nextLink:     '//a[@rel="prev"]'
  ,pageElement:  '//div[@class="day"]'
}

diary_navi は、a タグに「rel="prev"」「rel="next"」を追加しただけ。そのうち公開する

LDRize と FreeStyleWiki

オフィシャルの siteinfo になかったので、でっちあげ。しばらくテスト的に使ってみる

,{
   name: 'fswiki',
   domain: '//div[@class="footer"]/a[contains(@href,"http://fswiki.")]',
   paragraph: '//di[[contains(@class,"day")]//h2|//div[contains(@class,"day")]]/h3|//div[contains(@class,"day")]//h4',
 }

ついでに、自分用 rep2 のも

,{
    name: 'rep2',
    domain: 'http://example.jp/rep2/*',
    paragraph: '//t[[contains(@class,"tl")]|//dt[contains(@id,"r")]],
    link: 'a',
    view: 'a/text()',
    height: 5
  }

今さらながら、Twitter Bookmarklet

今さら Twitter。いや、自分で使うツールが欲しかったので。なんか、まだ挙動があやしいんだけど、動いてはいるのでソース張っとく

マウスで選択した部分を投稿するのがメインの用途だ
参考にしたのは、いつも利用している「あとで読む

javascript:(function(){
    var U='Username';
    var P='Password';
    var S='';
    if(document.selection)
        S=document.selection.createRange().text;
    else if(window.getSelection)
        S=window.getSelection();
    else if(document.getSelection)
        S=document.getSelection();
    var V = prompt('twit ?',S);
    if(V==null || V=='' || V.length > 140)return;
    var W=window.open('','','width=200,height=100');
    var D=W.document;
    D.title='now twitting';
    var F=D.body.appendChild(D.createElement('form'));
    F.setAttribute('method','POST');
    F.setAttribute('action','http://'+U+':'+P+'@twitter.com/statuses/update.xml?status='+encodeURIComponent(V));
    F.submit();
    W.onunload=function(){W.close()}
})()

setPreferenceJsonForKey 修正

setPreferenceForKey は、string しか保存できないっぽいので、でっちあげてたんだが、ちょっと変だったので修正した

Dashboard Widget の設定ファイルのサイズは、メガ単位でも大丈夫っぽい

PrefJSON とかでっちあげたはいいが、そもそも大量のデータ放り込んで大丈夫? ってのが気になったので、write して read するだけの実験をしてみた

  • サイズだけなら、10MB とかでも OK っぽい。上限わからず
  • ただし、設定ファイルに遅延書き込みされてて、いつまでたっても終わらない
  • この前買った MacBook (Mid 2007) だと、1MB くらいのデータでひと呼吸待つ感じ。これくらいが体感的な限界かな

テキストデータで 1MB っていうと、たいがいな量なので、通常利用時はあんまし心配しなくてよさげ

ちなみに、設定ファイルは ~/Library/Preferences/widget-hogehoge.plist に保存される

setPreferenceForKey は、string しか保存できないっぽいので、でっちあげた

2007-10-02 追記: バグ持ちだったので修正

MacOSX の Dashboard 用 widet の設定値保存の際、

widget.setPreferenceForKey(string, key);

で、key の値として string を保存できるが、どうも hash とかそのまま保存できないっぽい。仕方ないので作った

// PrefJSON.js
if (window.widget) {
    if ( typeof(PrefJSON) == 'undefined' ) PrefJSON = function() {};

    PrefJSON.prototype.setPreferenceJsonForKey = function(hash, key) {
        if ( hash == null ) {
            widget.setPreferenceForKey(null, key);
        }
        else {
            var array = new Array;
            for ( var i in hash ) {
                array.push("'"+i+"':'"+hash[i]+"'");
            }
            var str = '{'+array.join(',')+'}';
            widget.setPreferenceForKey(str, key);
        }
    }

    PrefJSON.prototype.preferenceJsonForKey = function(key) {
        var d = widget.preferenceForKey(key);
        var json = new Array;
        if ( d && d.length > 0 )
            json = eval(d);

        return json;
    }
}

使う方で

var hash = new Array;
hash = {hoge:'fuga', hige:'hage'};
pref.setPreferenceJsonForKey( hash, key );

var pref = new PrefJSON();
var json = pref.preferenceJsonForKey( key );

とかする

Google Maps API 2

今さらながら、自作スクリプトを API 2 に変更。以下、変更した点。

  • javascript の引数を v=1 から v=2 に変更
  • GPoint(lng,lat) を GLatLng(lat,lng) に変更
  • GMap を GMap2 に変更
  • setMapType(hoge) していたのを、後述する setCenter に統合
  • centerAndZoom を setCenter に変更
    • 引数の zoom (0-17) が逆順になった
    • 第三引数で MapType を渡す

他はともかく、zoom が逆順になったのが、ソースにコメントいれとかんと絶対忘れるな

XMLHttpRequest でのアクセスを区別したい

バックエンドにあるシステムで、XMLHttpRequest の時と普通のWEBブラウザからアクセスした時とで画面まわりを切り替えたいなぁ、と思って今まで色々調べていたんだが、どうやらprototype.js だとリクエストヘッダで判別できるらしい

ソースを見てみると、

var requestHeaders =
  ['X-Requested-With', 'XMLHttpRequest',
   'X-Prototype-Version', Prototype.Version];

が該当部分っぽい。prototype.js だけの工夫なのかな? jkl-parsexml.js はそういう部分は見当たらず。そのうち他のライブラリも見てみよう。

ちょっと勢いでを落としてプレビューする

上に書いたように xmlHttpRequest 投げるとすると、onkeyup で一文字毎に送信すると、結構壮大にリクエストし続けることになるので、ちょっとWait かまさんとまずいかもしれない。で、そのためにこんなことをしてみる。

   <script language="javascript" type="text/javascript">
     function countNum() {
       var n = 1;
       return function() {
         return n++;
       };
     };
     function updateHTML() {
       if ( c() % 10 == 0 )
         document.getElementById('out_html').innerHTML = document.getElementById('in_text').value;
     };
     var c = countNum();
   </script>
   <div id="out_html"></div>
   <form action="post">
     <textarea name="in_text" id="in_text" cols="80" rows="20" onkeyup="updateHTML();"></textarea>
   </form>

これで 1/10 になった。。。というような単純なことを、努めて日記に書き残すようにしよう、と思った。

[ << < 1  2  3 >> ]

Home > JavaScript Archive

Feeds

Return to page top