Edit in GitHubLog an issue

UXP脚本如何工作

每个 Photoshop 脚本文件都是一个纯文本文件,文件扩展名为 .psjs。我们计划在未来将 UXP 脚本扩展到其他应用程序,并支持通过双击打开脚本。当这种情况发生时,文件扩展名将有助于识别该脚本应在哪个应用程序中启动。

执行环境

Photoshop在调用脚本时设置了一个执行环境。

在一个执行环境中,一次只能执行一个脚本。你不能从正在运行的脚本中调用另一个脚本。使用 UXP 脚本模块,您可以访问 ExecutionContext.

Copied to your clipboard
1const script = await require("uxp").script;
2const executionContext = script.executionContext;

它提供了关于当前脚本执行的细节,向Photoshop发送数据的方法,以及管理脚本生命周期的事件。你也可以使用属于 executionControl.hostControl 来暂停/恢复历史状态和自动关闭文件。在脚本中阅读更多内容 reference.

事件

脚本的执行可以在以下情况下被取消。

  • 用户点击进度条上的 "取消"。
  • Photoshop在运行一个脚本文件时遇到了一些异常

脚本开发人员可以添加事件处理程序,以便在命令被取消时获得通知。回调将收到 "原因 "作为参数。

Copied to your clipboard
1executionContext.onCancel.addListener((reason) => {
2 // 原因将是PS在取消时设置的一个json对象
3 reject("Message");
4});

用户界面

脚本只能显示一个对话框的用户界面。任何由脚本创建的用户界面在本质上都是模态的。 通过showModal()使用await(不让它返回一个Promise),执行可以继续到完成,这时任何用户界面都会被破坏。如果你没有看到你的模态UI出现,请检查它前面是否有一个`await'。

如果脚本完成的时间超过2-3秒,Photoshop会自动显示一个进度条。

Global Await

await 表达方式的原因 async 暂停函数的执行,直到Promise得到满足或被拒绝,并恢复执行 async 函数履行后。当恢复时,其值为 await 表达式是已完成的Promise的表达式。

全局等待是指等待一个全局范围的异步函数完成。

Copied to your clipboard
1function anyAsyncFunction() {
2 return new Promise((resolve, reject) => {
3 const val = Math.random();
4 if (val > 0.5) {
5 console.log("Resolve promise");
6 resolve(val);
7 } else {
8 console.error("Rejecting promise");
9 reject(val);
10 }
11 })
12}
13
14// Global await
15try {
16 const val = await anyAsyncFunction();
17 console.log("Value from function", val);
18} catch {
19 console.log("Rejected promise!;")
20}
21console.log("Script completed");

允许的 UXP 模块

通过插件开发,开发人员在 "manifest.json "文件中定义他们想要访问的 UXP 模块。脚本权限由 Photoshop 内部管理,不需要清单配置。

目前,并非所有的 UXP 模块都能被脚本访问,但我们计划在未来的 UXP 版本中启用更多的模块目前支持的所有模块都是默认启用的。

UXP模块支持当前的访问级别样品
FontsYes安装的字体可以被读取View sample.
ClipboardYesRead/write 访问View sample.
LocalFileSystemYes文件选取器可以用来打开/保存文件。你也可以调用 getTemporaryFolder API 来访问一个临时数据文件夹。View sample.
NetworkNo
LaunchProcessNo
WebViewNo
IPCNo

如果您需要使用尚未启用脚本的 UXP 模块,您应该选择创建一个 UXP 插件来代替。

常见问题

  • UDT(用于调试)和 Photoshop 的最低版本要求是什么?
    • UXP 脚本在 Photoshop v23.5 和 UDT v1.6 中可用。
  • 你能从另一个脚本中调用一个脚本吗?
    • 不能,脚本间的通信是不可能的。
  • 你能向脚本传递参数吗?
    • 对于第一个版本,不支持传递参数,但**在未来的版本中可以实现。
  • 脚本可以从插件中执行吗?
    • 不能;但是,任何 UXP 脚本代码都应该能够从 UXP 插件中运行。
  • 我可以为一个模块启用权限吗?
    • 开发人员不能启用或寻求某个模块的权限。默认情况下,所有允许的模块都由 Photoshop 启用。
  • 为什么PS中只允许有限的模块?我们期待其他模块在未来被启用吗?
    • 这是UXP脚本模块的第一个版本,我们正在努力在即将发布的版本中启用访问更多模块的权限。
  • Privacy
  • Terms of Use
  • Do not sell or share my personal information
  • AdChoices
Copyright © 2023 Adobe. All rights reserved.