我有一个运行良好的脚本,但可能需要很长时间才能完成。这是一个 javascript 文档并运行多个函数。
该脚本在 InDesign 中运行,并且基于 javascript。ExtendScript Toolkit 提供了几个演示脚本,其中之一是SnpCreateProgressBar.jsx
.
现在我想将进度条添加到我当前的脚本中,但我不完全确定如何执行此操作。
在不在这里发布整个代码的情况下,我将执行一个函数。这在整个脚本中重复。
var myDoc = app.activeDocument;
var myTables = myDoc.stories.everyItem().tables.everyItem();
var myTableElements = myTables.getElements();
function basicSearchReplace(findWhat, changeTo){
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findChangeGrepOptions = NothingEnum.nothing;
app.findGrepPreferences.findWhat = findWhat;
app.changeGrepPreferences.changeTo = changeTo;
myDoc.changeGrep();
}
basicSearchReplace ('^~8 ', '~8\\t');
basicSearchReplace ('^·( |\\t)', '~8\\t');
SnpCreateProgressBar.jsx
可以在这里找到
也许还有另一种扩展脚本方法来创建进度条?
--- 小更新 ---
所以经过一些谷歌搜索和测试后,我想出了:
function SnpCreateProgressBar ()
{
this.windowRef = null;
}
SnpCreateProgressBar.prototype.run = function() {
var win = new Window("palette", "SnpCreateProgressBar", [150, 150, 600, 260]);
win.pnl = win.add("panel", [10, 10, 440, 100], "Script Progress");
win.pnl.progBar = win.pnl.add("progressbar", [20, 35, 410, 60], 0, 100);
win.pnl.progBarLabel = win.pnl.add("statictext", [20, 20, 320, 35], "0%");
win.show();
while(win.pnl.progBar.value < win.pnl.progBar.maxvalue)
{
// this is what causes the progress bar increase its progress
win.pnl.progBar.value++;
win.pnl.progBarLabel.text = win.pnl.progBar.value+"%";
$.sleep(10);
}
alert('Done!');
win.close();
};
if(typeof(SnpCreateProgressBar_unitTest) == "undefined") {
new SnpCreateProgressBar().run();
}
现在我想我还没有完全理解。如果我将我的“待运行”代码放在 while 循环中,它只会执行该代码并在最后运行进程栏......底部的 if 循环也是如此
我不明白什么?