今回こんな場面に遭遇したので。
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の設定ファイルがあるのでちょっと面倒。
ただ今回も結構な時間悩んでしまいました。
日々精進。
お勉強になりました!
返信削除読者登録しておきましたので、
更新楽しみにしてます^^
藤井 直人さん
返信削除コメントありがとうございます。
知識不足で不十分な点もありますが、これからも更新していきますので、よろしくお願いします。