我需要通过编程来抑制Photoshop显示的“解决丢失的资产”对话框,当打开包含中断的库链接的嵌入式智能对象时。在我的例子中,我不关心缺少的链接,也不能阻止我的脚本的执行,等待手动干预来取消对话框。
我使用JavaScript打开Photoshop 2022中的智能对象,如下所示(为了简洁起见,省略了其他文件类型验证检查):
app.displayDialogs = DialogModes.NO;
//...
if (layer.kind == LayerKind.SMARTOBJECT) {
try {
executeAction(stringIDToTypeID("placedLayerEditContents"), new ActionDescriptor(), DialogModes.NO);
// <- dialog still shows here, script execution is blocked, and no exceptions to catch after dialog is closed
} catch(e) {
alert(e);
}
}代码按预期工作,只是Photoshop似乎既忽略了DialogModes.NO参数,也忽略了在开头设置的displayDialogs值。在尝试/捕捉中包装调用站点在这里没有帮助,因为在解析链接资产时抛出的任何异常都会被Photoshop进程有效吞没,并在executeAction返回之前通过"relink“对话框进行处理。
从脚本中查询打开的对话以发送cancel或esc命令是可以接受的,但是由于这个对话框的阻塞性质,我的脚本在手动关闭后才知道它的存在(在打开Smart对象之后立即发出警报,直到对话框关闭后才会显示)。
调用app.runMenuItem没有什么不同:
app.runMenuItem(stringIDToTypeID('placedLayerEditContents'));除了几年前从未完全解决的这个线程描述了同一个问题之外,我还没有找到真正的解决办法。
我愿意使用“创造性”解决方案来缓解这个问题,如果没有明确的方法来抑制这个对话框,只要它不破坏智能对象内容(也就是没有光栅/扁平)。异步轮询对话框窗口的存在,或者在创建对话框时添加监听器似乎都是合理的解决办法,但我的ps脚本经验有限,我不确定如何做到这一点。
请注意,我在这里处理的是嵌入式智能对象,而不是链接的智能对象,因此在通过Photoshop打开智能对象之前,没有支持智能对象的物理文件(在右键单击智能对象层时,双击智能对象层预览拇指,或在上下文菜单中选择“编辑内容”项)。
发布于 2022-09-02 08:20:28
我在找一个修复方法来消除缺失的字体。这也将为智能对象的公开对话提供方便。代码已从这里中提取
var f = File.openDialog();
if (f)
{
(d = new ActionDescriptor).putPath(stringIDToTypeID("target"), f);
executeAction(stringIDToTypeID("open"), d, DialogModes.NO);
// open your file now
}https://stackoverflow.com/questions/73475799
复制相似问题