Как использовать (или избегать) Rhino Javascript в аддоне Thunderbird?

Я запускаю небольшой код JS в расширении Thunderbird (аддоне), которое я разрабатываю. Код содержит несколько базовых классов Java. Как только он наткнулся на строку вроде:

var s = java.lang.String ('');

Он просто перестает работать (зависает) без каких-либо ошибок или каких-либо возвратов.

Когда я запускаю тот же код Java в своем CLI, он работает нормально.

Я осмотрелся, и на данный момент я понимаю, что эти вещи java.lang.String работают только в движке JS под названием Rhino. У Mozilla также есть еще один движок JS под названием «spidermonkey». Может быть, кто-нибудь может ответить на один из этих вопросов, чтобы помочь мне:

  1. Какой движок JS работает в Thunderbird (для надстроек)?
  2. Как я могу написать/протестировать JS-код, который будет работать в TB, без постоянного развертывания его в надстройке?
  3. Почему java.lang.String просто зависает и останавливается вместо того, чтобы выдавать ошибку о неопределенном символе?
  4. Как заставить классы java.lang.String работать в расширении TB?

Спасибо


person Kenyakorn Ketsombut    schedule 20.11.2016    source источник


Ответы (1)


Хотя вы выяснили основную разницу между Rhino и Spidermonkey, ответы на этот вопрос содержит дополнительную информацию о различиях между различными движками Javascript.

Какой движок JS работает в Thunderbird (для надстроек)?

Движок JS, работающий в Thunderbird: SpiderMonkey

Как я могу написать/протестировать JS-код, который будет работать в TB, без постоянного развертывания его в надстройке?

Вы можете нажать Ctrl+Shift+j в Thunderbird, чтобы открыть консоль ошибок, где вы можете запустить JS в текстовом поле с префиксом >>.

Почему java.lang.String просто зависает и останавливается вместо того, чтобы выдавать ошибку о неопределенном символе?

ИМХО, это не зависание, это попало бы в блок исключений.

Запуск вашего кода в консоли ошибок Thunderbird привел к следующей ошибке:

var str = new java.lang.String('hello');
ReferenceError: java is not defined [Learn More]

Запуск вашего кода в Firefox, который также использует SpiderMonkey, вызвал следующее исключение:

var str = java.lang.String('Hello');
/*
Exception: ReferenceError: java is not defined
@Scratchpad/3:10:5
*/

Как заставить классы java.lang.String работать в расширении TB?

Один из возможных вариантов — использовать XPCOM, но сама эта страница предупреждает об устаревании надстроек XPCOM в будущем.

person learningloop    schedule 28.11.2016