OneScript

Image

使用项目内的图片文件、Data URL、URL 或 Request 显示图片。

项目内的图片

从项目中导入图片文件。导入值是构建产物的 file:// 地址,需要用 URL 包装后传入:

import { Image, Modifier } from "onescript/views"
import sunset from "./assets/sunset.png"

<Image
  url={new URL(sunset)}
  resizable
  modifier={Modifier
    .scaledToFill()
    .frame({ height: 160 })
    .clipped()}
/>

项目内的图片在 App 和 Widget 中都可以显示,支持 PNG、JPEG、GIF 和 WebP;SVG 文件会被打包,但 Image 无法显示。可以显示任意本地 file:// 文件(包括分享给 Action 的文件),文件不存在或无法解码时会明确报错。同一个地址也可用于 fs,例如 await fs.promises.readFile(new URL(sunset))。

Data URL

先声明 Data URL,再传给 Image:

import { Image, Modifier } from "onescript/views"

const logoDataURL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII="

<Image
  dataURL={logoDataURL}
  resizable
  modifier={Modifier
    .scaledToFit()
    .padding({ horizontal: 12, vertical: 8 })}
/>

dataURL 必须使用 image/* 媒体类型。

URL

公开 HTTP(S) 图片使用标准的 Node 兼容 URL 对象:

import { Image, Modifier } from "onescript/views"

const publicImageURL = new URL("https://example.com/public.png")

<Image
  url={publicImageURL}
  resizable
  modifier={Modifier
    .scaledToFit()
    .frame({ width: 120, height: 120 })}
/>

Request

图片需要 Cookie、Authorization 或其他请求头时,使用标准 Fetch API Request:

import { Image } from "onescript/views"

const privateImageRequest = new Request(
  "https://example.com/private.png",
  {
    method: "GET", // 省略时默认为 GET
    headers: {
      Cookie: `session=${sessionId}`,
      Authorization: `Bearer ${token}`,
    },
  },
)

<Image
  request={privateImageRequest}
  resizable
/>

请求接口通过 Body 返回图片时,可以传入其他 HTTP Method:

const generatedImageRequest = new Request(
  "https://example.com/images/render",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      width: 800,
      height: 600,
    }),
  },
)

<Image request={generatedImageRequest} />
PropType说明
dataURLstring图片 Data URL,与 url、request 互斥。
urlURL导入的 file:// 图片或公开的 HTTP(S) 图片地址,与 dataURL、request 互斥。
requestRequestHTTP(S) 请求,与 dataURL、url 互斥。
scalenumberurl 与 request 图片的正数缩放比例,默认 1。
resizableboolean允许图片调整尺寸。

dataURL、url 和 request 必须且只能提供一个。图片缩放使用有序的 scaledToFit 和 scaledToFill 修饰符。

网络图片在加载时显示系统进度指示器,失败后显示本地化错误文本。失败信息也会写入原生日志,请求头值不会进入日志。

OneScript 会传递 Request 的 URL、Method、请求头、Body、缓存策略和重定向策略。Request.credentials 与脚本 WKWebView、App 的 Cookie 存储保持隔离;身份认证需要 Cookie 时,通过 Request.headers 显式传入。同源重定向保留请求头,跨源重定向会移除 Authorization、Cookie 和 Proxy-Authorization。

App 视图在 iOS 17–26 使用 OneScript 兼容加载器,在 iOS 27 及以上使用 SwiftUI 原生异步图片加载器。Widget 会在创建时间线条目前下载并验证图片,请求失败会通过明确错误终止 Widget 执行。

SF Symbols 和 Pikaicons 使用 Symbol。图片数据或来源无效时会抛出明确错误。

How is this guide?

最后更新于

本页目录