mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-08 19:06:15 -08:00
2.3 KiB
2.3 KiB
VAST 初始化兼容决策:待用户选择
来源:真实发布契约;已可重跑的
vast-contract.test.mjs及test/vast.test.js固定以下矛盾:
| 同一次 callback 开始时 | npm1.0.0 | 未发布工作区1.2.0 |
|---|---|---|
| imaPlayer | 已构造、非null | null,直到init/playUrl/playRes |
| DOM | 已挂载$container,并提供id | 不存在容器,container getter为null |
| 设置 | IMA默认值 | 默认启用preloading及restoreCustomPlaybackStateOnAdBreakComplete |
实际发布用户可以直接写 ({ imaPlayer }) => imaPlayer.addEventListener(...)。
工作区用户可以先判断context.imaPlayer === null并修改playerOptions,然后等待
用户操作调用init()。在同一默认调用中无法同时保留非null和null,以及相反初始化时机。
添加别名或getter也无法同时满足两种值;按callback源码猜测用户版本不可取。
推荐的具体处置(尚未实现)
优先保持实际npm1.0.0默认行为:回调前初始化、提供id/$container,SDK默认设置保持 发布语义;保留workspace新增的init/container/settings等字段作为扩展。
确实依赖未发布1.2.0惰性行为的代码,拟通过新的可选第二参数明确选择该兼容模式:
// npm旧用法保持原样
artplayerPluginVast(({ imaPlayer, $container, id }) => {
imaPlayer.addEventListener('AdStarted', onAdStarted)
})
// 未发布工作区1.2.0的初始化时机与默认设置保留在显式模式
artplayerPluginVast((context) => {
context.playerOptions.autoResize = false
button.onclick = () => context.playUrl(adTag)
}, { compatibility: 'workspace-1.2' })
这意味着依赖未发布1.2.0默认惰性的代码需要增加一个参数。普通npm1.0.0用户保持 原调用;这不是声称两种相反语义完全兼容。第二参数仅为待确认方案,当前生产代码 尚未新增它;类型误声明、CJS.default和分发路径仍各自单独验证。
当前检查点
生命周期与资源修复不依赖该选择,已经推进;默认初始化暂保持工作区行为,不把 PKG-VAST-03或VAST-CONTEXT-01标完成。用户针对Ads的类型推导批准不适用于本决策。 需要用户确认是否按推荐方案优先实际发布默认行为;也可指定其他取舍。