Oracle APEX中JavaScript无法解析静态占位符,如何获取静态文件URL
Oracle APEX 静态资源在JS场景下的URL获取问题
在Oracle APEX中集成浏览器通知(Notification)功能时,遇到自定义通知图标无法正常显示的问题。
这类通知图标需要传入图片的可公开访问URL才能正常加载。Oracle APEX支持上传静态文件,常规页面渲染场景下可以通过#WORKSPACE_IMAGES#image.png的格式引用工作区上传的静态资源,但这类占位符在JavaScript运行环境中不会被自动替换。
核心待解决问题:如何在JavaScript中获取Oracle APEX工作区下静态PNG文件的稳定有效访问URL
为定位问题,对不同格式的图标路径参数做了全量测试,相关测试代码如下:
showNotification( // "https://developers.google.com/web/images/web-fundamentals-icon192x192.png", // 配置后图标可正常加载 // "r/xxxxx/files/static/v71/image.png", // 配置后图标可正常加载,但路径会随版本变动 // "#WORKSPACE_IMAGES#image.png", // 配置后图标无法加载 // "&WORKSPACE_IMAGES.image.png", // 配置后图标无法加载 // "#IMAGE_PREFIX#image.png", // 配置后图标无法加载 // "&IMAGE_PREFIX.image.png", // 配置后图标无法加载 notification.title, notification.body, () => parent.focus() ); const showNotification = (icon, title, body, onclick) => { // 检查浏览器是否支持通知能力 if (!("Notification" in window)) { alert("当前浏览器不支持桌面通知功能"); } // 检查通知权限是否已授予 else if (Notification.permission === "granted") { // 权限校验通过,创建通知实例 let notification = new Notification(title, { icon: icon, body: body, }); notification.onclick = onclick; } // 权限未授予时,向用户发起权限申请 else if (Notification.permission !== "denied") { Notification.requestPermission(); } };
测试结果
可正常生效的配置
- 外部公开图片完整URL,例如
https://developers.google.com/web/images/web-fundamentals-icon192x192.png - APEX静态资源实际渲染路径
r/xxxxx/files/static/v71/image.png:通过APEX图片展示组件正常渲染后抓取的实际图片地址,可以正常加载,但路径会随APEX版本迭代、静态资源版本升级发生变动,不具备长期稳定性
无法正常生效的配置
#WORKSPACE_IMAGES#image.png&WORKSPACE_IMAGES.image.png#IMAGE_PREFIX#image.png&IMAGE_PREFIX.image.png
运行环境说明
- 所用Oracle APEX版本为20.2,部署在自治数据库(Autonomous Database)环境下
最终落地解决方式
将通知图标图片上传至自有托管服务对应的固定域名下,通过该域名的永久固定URL访问图片,解决了通知图标加载失效的问题。
内容的提问来源于stack exchange,提问作者HotFix
相关产品推荐
相关产品推荐

