Уничтожение окон палитры ScriptUI (и не только)

В ExtendScript я столкнулся с очень странным сценарием, в котором мне нужна помощь гуру ScriptUI. У меня есть огромный скрипт InDesign, который во время выполнения отображает индикатор выполнения в окне палитры. (var w = new Window("palette", "Progress");) Я хотел бы, чтобы эта палитра была закрыта, когда скрипт будет завершен, поэтому я добавил w.close() в конце скрипта.

Однако это происходит только в том случае, если фокус все еще находится в InDesign. Некоторым из наших сотрудников нравится работать над другими задачами, пока скрипт InDesign работает на другом экране в фоновом режиме, и это нормально, но когда они возвращаются в InDesign, эта палитра индикатора выполнения все еще отображается на экране, показывая 100% завершение. Это окно палитры можно перемещать, но его нельзя закрыть, даже если щелкнуть маленький красный крестик в углу. В конечном итоге это приводит к тому, что несколько палитр остаются на экране в течение дня, так как этот сценарий вызывается десятки раз в течение обычного рабочего дня.

Читая прекрасное руководство Питера Карела по ScriptUI, я узнал, что все палитры остаются в памяти даже после закрытия с помощью .close(). Я хочу, чтобы они были полностью стерты из памяти и очищены, чтобы они не оставались на экране, если пользователь переключится на другое приложение во время работы скрипта. Любые идеи о том, как это сделать?

Между прочим, я хотел включить некоторый пример кода, чтобы вы могли убедиться сами, но, похоже, он не работает, когда это всего лишь небольшой код, вызываемый с помощью ESTK; только в моем производственном сценарии из 4647 строк. Таким образом, я не могу вставить какой-либо пример кода.


person Sturm    schedule 05.02.2014    source источник
comment
какую версию ID используете вы и ваша команда?   -  person fabianmoronzirfas    schedule 06.02.2014
comment
На данный момент CS6. Не уверен, будем ли мы обновляться до CC в будущем.   -  person Sturm    schedule 06.02.2014
comment
Возможно, лучше было бы обновить CC и использовать Extension Builder 3. Он все еще находится в стадии бета-тестирования, но вы можете создавать настоящие панели с возможностью стыковки. Я знаю, что это не решает вашу проблему, но я был в той же точке. Мой инструмент стал большим. Поэтому я разделил несколько процессов на отдельные сценарии. Постоянно открытая панель не работала. Единственное приложение Adobe, которое может справиться с этим хорошо, — это After Effects с его стыкуемыми панелями.   -  person fabianmoronzirfas    schedule 06.02.2014
comment
Возможно, это поможет: из руководства по инструментам Javascripts: › $.gc () › Инициирует сборку мусора в движке JavaScript. ссылка Страница 219   -  person fabianmoronzirfas    schedule 06.02.2014
comment
К сожалению, я не думаю, что наша компания когда-либо обновится до CC и определенно не сделает этого в ближайшем будущем. Что касается идеи со сборкой мусора, то она была хороша, но, боюсь, она тоже не работает.   -  person Sturm    schedule 07.02.2014


Ответы (2)


Вы можете повторно использовать окно между запусками скрипта, сделав его глобальной переменной и используя

#targetengine 'my_target_engine_name'

что означало бы, что у пользователей открыто только одно надоедливое окно. Это не решение, но в сочетании с трюком с положением Тревора это может быть приемлемым взломом.

person ryecroft    schedule 29.08.2014
comment
Да, я обнаружил это, так что, по крайней мере, если палитра индикатора выполнения остается видимой после завершения сценария, она снова станет пригодной для использования палитрой индикатора выполнения при следующем запуске сценария. Я посмотрю взлом Тревора. - person Sturm; 05.11.2014

Не знаю, интересно ли вам, но обычно вы можете использовать var w = new Window ("palette", "My Window Title"); а затем w.visible = false или w.location.y = 10000 или w.size = [0,0]. Не очень красивые решения, но их легко применять

person Trevor    schedule 28.05.2014
comment
Я мог бы дать им попробовать, как только у меня будет время. Спасибо! - person Sturm; 03.06.2014