ブラウザ上のボタンをクリックすると、Illustratorで指定したファイルが開くようにする方法

ブラウザにはセキュリティを確保するために様々な制約があります。

例えば「ブラウザ上のボタンをクリックするとイラストレータが立ち上がって指定したファイルを開く」という動作をさせたくても出来ません。

「ボタンをクリックすると、ハードディスク上のファイルを別の場所に移動する」ということもできません。

しかしながら今回の案件ではそれを実現する必要がありまして、なんとかせねばならなくなりました。

もちろん通常の方法では実現できません(出来たらとんでもないセキュリティホール)ので、多少クライアントPCに細工を施すことでなんとかしました。

ブラウザのイベントから、ローカルにインストールしたRubyに指令を送る

スマホでウェブサイトを見ているとき、リンクをタップするとApp StoreやGoogle Palyのアプリが開くことがありますよね。地図のアイコンをタップするとマップアプリが立ち上がったりとか。

あれは、「URLスキーム」という仕組みが使われています。

ウェブサイトへのリンクは「http://~」という記号で始まりますが、この「http://」がURLスキームです。「http://」から始まるアドレスを見つけたら、ウェブサイトから情報を取ってきてブラウザで表示するという風にOSに設定がされています。

ちなみに「comgooglemaps://」はGoogleMapsアプリのURLスキームです。ウェブサイト上にこのURLから始まるリンクを張ると、スマホであればタップと同時にGoogleMapsアプリが起動します。

実はこの機能はスマホだけのものではなく、WindowsOSやMacOSにも有効です。Macは詳しくないのですが、Windowsであればレジストリに設定を書き込むことでオリジナルのURLスキームを使用できるようになります。

例えば「chikuwa://」というURLスキームを登録するのであれば、以下のような感じでOKです。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\chikuwa]
@="URL:Chikuwa Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\chikuwa\shell]

[HKEY_CLASSES_ROOT\chikuwa\shell\open]

[HKEY_CLASSES_ROOT\chikuwa\shell\open\command]
@="\"C:\\Windows\\System32\\wscript.exe\" \"C:\\MyApps\\app.vbs\" \"%1\""

この情報をレジストリに書き込むと、「chikuwa://」というURLスキームがOSに登録されます。「chikuwa://」で始まるURLをクリックする度に、「C:\MyApps\app.vbs」が呼び出されて実行されます。

なんでRubyじゃなくてVBSなんだと思われるかも知れませんが、これには理由があります。レジストリに、実行するプログラムのパスを登録する必要があるのですが、フルパスで指定しないとRubyが起動しないのです。Rubyのパスが変わると起動しなくなりますので、一旦VBSを経由させているのです。VBSからRubyを呼び出す場合は、環境変数にRubyのパスさえ通っていれば問題なく起動しますので、将来のRubyの更新に備えてこの方法を採用しています。

Option Explicit
Dim ws
Set ws = WScript.CreateObject("WScript.Shell")
ws.Run "rubyw ""C:\MyApps\app.rb"" " & WScript.Arguments(0)

ちなみにapp.vbsの中身はこんな感じです。シェルからrubywを引数付きで呼び出すだけのプログラムです。

引数にはURL全体が渡ります。引き渡すデータをURLデコードして「chikuwa://」の後につけてあげれば、スクリプトに情報を届けることができます。僕の場合は、JavaScriptで配列のパラメータをjsonエンコードし、さらにencodeURIComponentでエンコードして使っています。

require 'uri'
require 'json'

m = ARGV[0].match(/^isdfiler:\/\/(.+)\//)
params = JSON.parse(URI.unescape(m[1]))

Rubyでは上記のようにすれば、パラメータを復元できます。
あとはRubyでファイルの操作をすればOKです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする