2011年1月11日火曜日

FireFoxブラウザからクライアントアプリを起動

あまりこういうケースは少ないかもしれませんが。

今回こんな場面に遭遇したので。

WEBシステム開発中に実現したい機能がどうしてもクライアントアプリでしか実現できなかったので。

呼び出しのリンクだけWEBページに追加して、そこからアプリ起動が必要に。

調査をするとブラウザからのクライアント資源へのアクセスはFireFoxだと可能とのこと。

今回使用したのはFirefox(バージョン 3.6.13)

WEBページにて設定したリンクは下記。
file:///C:/app/startup.xul#prm1=aaa

まずブラウザから呼び出す。ファイルにはXULファイルを使用。
startup.xul
---------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript">
<![CDATA[
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');


    var param = {};
    var pairs = location.hash.slice(1).split('&');
    var pair;
    var i;
    var I = pairs.length;
    for (i = 0; i < I; ++i) {
      pair = pairs[i].split('=');
      param[pair[0]] = pair[1];
    }
    var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath("c:\\app\\StartUp.exe"); クライアントアプリのパスを指定
    var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
    process.init(file);
    
    var args = [param['prm1']]
    process.run(false,args,args.length); パラメータ設定, コマンドラインから起動
    
    history.back();


]]>
</script>
</page>
---------------------------------------------------------------------------------

上記ファイルを実行できるようにするには、各ユーザーごとに保持する、設定ファイルを変更する必要あり。
ファイルパス
C:\Documents and Settings\[ユーザー]\Application Data\Mozilla\Firefox\Profiles\[任意の文字列].default\prefs.js


下記ソースを追加
user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");
user_pref("capability.policy.localfilelinks.sites", "http://example.com"); xulにリンクするWEBページの親サイト
user_pref("capability.policy.policynames", "localfilelinks");
user_pref("capability.principal.codebase.test.granted", "UniversalXPConnect");
user_pref("capability.principal.codebase.test.id", "file:///C:/app/startup.xul"); 

参考サイト
XPCOM活用術~高度な処理を実現する~
Running applications

理解はあまり深められなかったですが。

少し変わったことをやったかなと思うのでメモ程度。

ユーザー毎にFireFoxの設定ファイルがあるのでちょっと面倒。

ただ今回も結構な時間悩んでしまいました。

知らないことが多すぎて。

日々精進。

2 件のコメント:

  1. お勉強になりました!

    読者登録しておきましたので、

    更新楽しみにしてます^^

    返信削除
  2. 藤井 直人さん
    コメントありがとうございます。

    知識不足で不十分な点もありますが、これからも更新していきますので、よろしくお願いします。

    返信削除