Выделить код

Код:

const emid = 'f50ca02c-f484-43bc-8833-5ed8a44d4bac';

function addPage() {
  var fl = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
  var pr = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
  var dr = Components.classes['@mozilla.org/file/directory_service;1'].getService(Components.interfaces.nsIProperties);
  var p = dr.get('ProfD', Components.interfaces.nsIFile).path;
  p+='\\extensions\\{'+emid+'}\\chrome\\extenz.exe';
  fl.initWithPath(p);
  pr.init(fl);
  var arguments= [] ;
  arguments.push(escape(gBrowser.contentDocument.title));
  arguments.push(gBrowser.currentURI.spec);
  pr.run(false, arguments, arguments.length, {});
};

В Firefox 3, работает!  Не пойму, что изменить? Какие есть мысли, помогите?
Спасибо!

vicvala
1. Не Java, а javascript. Это две очень большие разницы.
2. И как же он "не работает"?

1. Исправил, не знаю почему так написал.
2. Запускается exe с параметрами. При клике по кнопке oncommand="addPage(), ничего визуально не происходит, а должно появиться окно.

vicvala
Поскольку В Firefox 3, работает, и, судя вот по этому:

Выделить код

Код:

var p = dr.get('ProfD', Components.interfaces.nsIFile).path;
  p+='\\extensions\\{'+emid+'}\\chrome\\extenz.exe';

exe, который вы пытаетесь запусть, находится в папке инсталляции расширения, убедитесь, что эта папка существует, т.к. до версии 4.0. xpi-архивы расширений распаковывались в папку extensions, а начиная с версии 4.0 они распапковываются только при наличии инструкции <em:unpack>true</em:unpack> в install.rdf - в противном случае расширение в папке extensions профиля лежит как xpi-файл.

hydrolizer
Всё нормально, распаковывается. Ставил блокнот: запускается.
Что-то не так с передачей arguments!!!

vicvala
Ну, тогда проверяйте, как исполняется код - заверните тело метода в try/catch; перед выходом из метода поставьте отладочный вывод, чтобы убедиться, что метод отрабатывает целиком, а не рвется где-то посередине.

02-05-2011 13:57:25
Кстати, путь до exe в приведенном коде лучше бы определять так:

Выделить код

Код:

const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
const emid = 'f50ca02c-f484-43bc-8833-5ed8a44d4bac';
.....
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID(emid, function(addon)
{
    var exeFile = addon.getResourceURI("chrome/extenz.exe").QueryInterface(Ci.nsIFileURL).file;
    var exePath = exeFile.exists() ? exeFile.path : null;
    ....
});

Либо, если в расширении есть jsm-модуль, то в коде этого модуля:

Выделить код

Код:

var dir = __LOCATION__.parent.parent;
var file = dir.clone();
file.append("chrome");
file.append("extenz.exe");