====== Opera 9.5 で Execute Program が云々 ====== 2008-12-20 9.63 で空白区切りは改善したものの,カレントディレクトリが元のままになっていたのに対応.9.5/9.6系を使ってる場合アップデートを Opera 9.5 での困った話のひとつとして 内部アクションのExecute Program の引数の解釈が変わったなんて話がありまして. 詳しくは{{http://fatalerrorjp.blog27.fc2.com/blog-entry-1229.html|続Execute programについて}}にまとまってます. 9.5になってからは 内部アクション ''Delay'' を使うことで時間差で処理できるようになったので,プロンプトを出してどうにかする{{http://suehiro.blog.shinobi.jp/Entry/246|opera_exの代替}}という解決法もあるにはあるけども,menu.iniを書き換えて指定しなおしてとちょっと面倒だったわけで. opera_exだけなら,いいんですけどほかにも irvine.js が動かないとかもあってどげんかせんと(略 で,とりあえず irvine.js を直してスレに晒したのがこれ.[[http://ashula.info/files/opera/tips/irvine.js|irvine.js]]
irvine = new ActiveXObject("Irvine.Api");
var str = WScript.Arguments(0).split(/ /);
if (str[0] == 1) {
irvine.AddUrlAndReferer(str[2],str[(1)],0);
} else if (str[0] == 2) {
irvine.ClearImportLinks();
irvine.ImportLinks(str[1],0);
} else if (str[0] == 3) {
irvine.Paste(0);
};
要するに,Splitで引数を配列に戻して呼んでやるという単純な方法.
Irvine右クリック拡張は?にあがってる WSH/JScript 経由のものはほとんどこれで対応できるはず.
そいで opera_ex に応用したのがこれ[[http://ashula.info/files/opera/tips/opera_ex_helper.js|opera_ex_helper.js]].
[[http://fatalerrorjp.blog27.fc2.com/blog-entry-1306.html|OperaのExecute programの問題点はこれで払拭された]] を受けてさらに修正.カレントディレクトリが変わらない問題と,パスに空白がある場合の問題に対応.feedback多謝.
var exe = "c:\\tools\\opera_ex.exe"; // \をエスケープすること
var cmdline = '\"' + exe + '\"' + " " + ( ( WScript.Arguments.length != 0 ) ? WScript.Arguments(0) : "" );
var WShell = WScript.CreateObject("WScript.Shell");
WShell.CurrentDirectory = exe.substring( 0, exe.lastIndexOf( "\\" ) );
//WScript.Echo( exe ); WScript.Echo( workdir ); WScript.Echo( cmdline );
WShell.Run( cmdline );
で,上のコードを opera_ex_helper.js てな感じの名前で保存しておいて, exe の opera_ex.exe へのパスを適宜修正したうえで,menu.iniの opera_ex を使ってた部分,たとえば
Item, "aタグを挿入してコピー" = Copy & Execute program,"C:\tools\opera_ex.exe","-a -x %u"
を
Item, "aタグを挿入してコピー" = Copy & Execute program,"C:\tools\opera_ex_helper.js","-a -x %u"
とすると,opera_exがまた使えるようになるかと.
==== もうちょっと汎用化してみた ====
これで,いちいちヘルパーを作らなくてもいけるようになったと思う.
[[http://ashula.info/files/opera/tips/exe_prog_helper.js|exe_prog_helper.js]]
var a0 = WScript.Arguments(0);
var exe = a0.substring( 0, a0.lastIndexOf( "|" ) );
var args = a0.substring( a0.lastIndexOf( "|" ) + 1 );
var workdir = exe.substring( 0, exe.lastIndexOf( "\\" ) );
var cmdline = '\"' + exe + '\"' + " " + ( args.length != 0 ? args : "" );
var WShell = WScript.CreateObject("WScript.Shell");
WShell.CurrentDirectory = workdir;
WShell.Run( cmdline );
ただし,menu.ini のほうを
Item, "aタグを挿入してコピー" = Copy & Execute program,"C:\tools\opera_ex.exe","-a -x %u"
を
Item, "aタグを挿入してコピー" = Copy & Execute program,"C:\tools\exe_prog_helper.js","C:\tools\opera_ex.exe|-a -x %u"
という風に,呼び出すソフトとその引数を ''|''でつなげて Execute program の第2引数に.