ページの移動にショートカットキーを追加

JavaScript, Web 3 Comments »

Amazonに倣って、BookFind.jpでも「前のページ」と「次のページ」の移動に、キーボード・ショートカットを割り当ててみました。

洋書のカテゴリをブラウズ中に、「前のページ」に戻る場合にはPキーを2回、「次のページ」に進む場合はNキーを2回押と、リンクをクリックすることなくページを移動できます。

アマゾンのサイトでも重宝している機能で、こちらではjQueryを利用しました。Internet Explorerでイフェクトが綺麗に出ないのが、ちょっと残念なところ。

「Bookfind.jpで洋書価格を比較」するブックマークレットを作成

JavaScript, Web No Comments »

Amazon.comで洋書を物色していると、ふとAmazon.co.jpでの値段が気になったりします。

アマゾンのページでASINかISBNをコピーして、BookFind.jpで検索すれば目的は果たせるわけですが、手作業でこれをするのはちょっと面倒なものです。

そこで作ってみたのが、このブックマークレット。Amazon.com、Amazon.co.uk、Amazon.co.jpの洋書ページから、BookFind.jpの当該ページへ、ワンアクションで移動できます。

» 「Bookfind.jpで洋書価格を比較」するブックマークレット – BookFind.jp – 洋書価格比較サイト

JavaScriptのコードは、こんな感じになります。

var u=location.href;
var d="http://www.amazon.co(m|.uk|.jp)/";
var m=u.match(new RegExp(d+"(gp/product|.*?/dp)/([0-9]{9}[0-9x])"));
if (m && (m.length >= 4)) {
    var asin=m.pop();
    location.href='http://bookfind.jp/isbn/'+asin;
}
else {
    window.alert('Amazonで、対象とする洋書のページを開いてから使用してください。');
}

このコードをbookmarkletterを使ってbookmarkletに変換しました。bookmarkletterのおかげで、ブックマークレットの作成がずいぶんと楽になりました。作者さんに、感謝です。

bookmarklet作成に役立つサイトには、Bookmarklet Builderもあります。こちらは、bookmarkletを読みやすいJavaScriptコードに整形できるのが便利です。

BookFind.jpにjQuery UIを導入

JavaScript, Web No Comments »

【ハウツー】Web開発者必見! jQuery UI ウィジェット3選」に触発されて、BookFind.jpjQuery UIを導入してみました。

今回採用したのは、TabsとEffect “Pulsate”のふたつ。

jQuery UI Tabs

Amazonのカスタマーレビューを表示する際に、日本、米国、英国をタブで切り替えられるようにしました。タブパネル内のデータ取得はオンデマンドで行うので、レビューに興味のない方は不要なデータを読み込む必要が無く、ページのロードが早くなります。

タブのデザインは、ThemeRollerで配布されている、「Smoothness」をそのまま使用させていただきました。

マイコミジャーナルにも書かれているように、Internet Explorerの表示が若干期待と違いますが、追々修正していきたいです。

jQuery UI Effect “Pulsate”

日米英のAmazon洋書価格の最安値を強調する視覚効果に使用しました。これまではjQuery単体で、hide()してfadeIn()で、似たようなことをやっていました。おかげで、簡単に点滅効果を出せるようになりました。

ちなみに、「pulsate」とは「振動させる」という意味だそうです。

“pulsate”の検索結果(7 件):英辞郎 on the Web:スペースアルク

ClipMenu 0.2 リリース

Cocoa, JavaScript, Mac, ソフトウェア 12 Comments »

複数のクリップボード履歴をとるソフト、ClipMenuのバージョン0.2をリリースしました。

主な変更点:

  • アクション機能を実装。
  • 環境設定画面にツールバーを搭載。
  • メニューに、数字キーのショートカットを追加。
  • 履歴を全消去できる、メニュー項目を追加。
  • 動作対象OSを、Mac OS X v10.4以上に変更。

ご不便をおかけしましたが、やっと履歴のクリアができるようになりました ;)

履歴の個別削除は、アクションメニューから行えます。アクションメニューの表示は、対象の履歴上で Shift + クリック するか、 Shift + Enter キーを入力します。

このメニューの表示方法は、本当なら右クリックで行いたかったんですが、技術的な理由により、今の形になりました。解決方法が見つかり次第、対応したいと思っています。

初期状態で使用できるアクションは、

  • Capitalize
  • lowercase
  • Title Case
  • UPPERCASE
  • プレーンテキストとしてペースト
  • 削除

の、6つです。さらに、日本語を対象とした、2つのスクリプトも同梱しています。

  • 半角英数字を全角に変換
  • 全角英数字を半角に変換

アクションメニューへの追加や削除は、環境設定パネルで行ってください。「アクション」タブで、右側のアウトラインビューから、左側のアウトラインビューにドラッグ&ドロップできます。

アクション設定画面

また、JavaScriptを使えば、自由に文字列加工用のアクションを作ることができます。スクリプトの書き方は、『JavaScriptアクションの書き方』を参考にしてください。

もしかしたら、説明を読むより、実際にやってみた方が簡単かもしれません。上述の、lowercaseやUPPERCASEは、たったの一行ですから。

不具合を見つけたり、説明が分かりづらいところなどが有れば、指摘していただけると助かります。メールでも、こちらにコメントでもOKです。

ClipMenuはフリーウェア(無料)ですから、お気軽に試してみてください。

ダウンロードはこちらどうぞ

» ClipMenu

ClipMenu の JavaScript アクションの書き方

JavaScript, Mac, ソフトウェア No Comments »

基本

ClipMenuでは、ユーザーの作成したアクションを使って、テキスト形式のクリップボード履歴に対する文字列処理を行うことができます。ユーザーアクションの実行には、スクリプト言語のJavaScriptを使用します。

ClipMenuのJavaScript実行エンジンには、WebKitに含まれるJavaScriptCoreを利用しています。JavaScriptの動作仕様は、Safariを参考にしてください。なお、ClipMenuでは基本的に、コアJavaScript部分のみを使用します。

設置

ユーザー作成のJavaScriptファイルは、以下のフォルダに設置します。このフォルダが存在しない場合は、Finderから新規に作成してください。

/Users/<ユーザ名>/ライブラリ/Application Support/ClipMenu/script/action

スクリプトファイルの拡張子は、”.js” になります。これ以外の拡張子を持ったファイルは、無視されます。

actionフォルダ以下に存在するフォルダは、アクションメニューのサブメニューとして機能します。同じ種類のスクリプトファイルは、フォルダにまとめておくと便利です。

スクリプトの書き方

[クリップボード文字列]

ClipMenuアプリケーションから渡されたクリップボード履歴の文字列は、clipText 変数に代入されています。この変数に対して関数を適用したり、メソッドを実行して文字列処理を行ってください。

例)アルファベットをすべて大文字に変える

clipText.toUpperCase();

[処理の終了]

必要な処理が済んだら、return 文で値を戻します。return 文に渡す式の戻り値は、文字列か数値になるようにしてください。

例)アルファベットをすべて大文字に変えて、クリップボードに送る

return clipText.toUpperCase();

この時、return 文に式を指定しないと、クリップボード履歴に対する処理は何も行われません。

例)何も返さず、終了

return;

[ライブラリの読み込み]

複数のファイルで共通して使用する関数などは、ライブラリとして別ファイルに保存しておくと便利です。ClipMenuでは、指定したフォルダに置かれたスクリプトを、ライブラリとして読み込むことができます。読み込みには、ClipMenuオブジェクトの、require() メソッドを使用します。

例)inflection-jsを読み込む

ClipMenu.require('inflection');

require() メソッドの引数には、ライブラリスクリプトのファイル名を渡します。拡張子の”.js”は、有っても無くても構いません。読み込みが成功したかどうかは、require() メソッドの戻り値を使ってチェックできます。ライブラリが見つかれば 1 を、見つからなければ 0 を返します。

例)require() メソッドの戻り値をチェック

var isExist = ClipMenu.require('inflection');
if (!isExist) {
    throw new Error('Cound not find the file');
}

ライブラリの読み込みが成功すると、ライブラリ内で定義された関数が利用可能になります。

例)inflection-jsで定義された、capitalize() メソッドを使用する

clipText.capitalize();

ライブラリフォルダには、アプリケーションバンドル内にある標準ライブラリフォルダと、ユーザーが設置するユーザーライブラリフォルダの二種類があります。ユーザーライブラリフォルダは、以下のパスに作成してください。

/Users/<ユーザ名>/ライブラリ/Application Support/ClipMenu/script/lib

ライブラリの読み込みは、ユーザーライブラリフォルダが優先されます。こちらから検索した後、標準ライブラリフォルダの検索を行います。

[ユーザー入力]

prompt() メソッドを使用すれば、ユーザー入力を組み合わせた処理ができます。

例)クリップボードにコピーしたURLと、入力したタイトルを組み合わせて、HTMLコードを作成

var input = prompt('タイトルを入力:');
return '<a href="' + clipText + '" title="' + input + '">' + input + '</a>';

その他

  • alert() 、 confirm() メソッドは動作しません。

WebKitで、外部リソースへのアクセスを抑制する

Cocoa, JavaScript No Comments »

JavaScriptでXMLHttpRequestを使うと、外部ファイルを読み込めますが、ClipMenuから実行する文字列処理には必要ありません。そこで、WebKitが外部リソースにアクセスできないような変更を加えてみました。

まず、webViewをインスタンス化した後に、delegateを設定。

[webView setPolicyDelegate:self];

WebPolicyDelegateプロトコルのメソッドを実装します。

- (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id)listener
{
    [listener ignore];
}

これで、ClipMenuで実行したJavaScriptでXMLHttpRequestを使ったhttpアクセスを行うと、”Permission denied”と、エラーになるようにできました。

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン