Orbeon表单提交成功后跳转移动应用链接失败如何解决?
问题分析
你的核心问题在于Orbeon的服务器端navigate动作无法正确处理自定义URI scheme(如my-app://),当跳转失败时,流程会触发recover summary分支,最终跳转到默认的表单实例管理页面。另外,原配置中xxf:evaluate(xxf:property('props.services-url'))属于冗余写法,xxf:property本身已返回字符串,无需额外解析。
解决方案
方案一:改用客户端JavaScript跳转(推荐)
将服务器端的navigate动作替换为客户端JS跳转,直接在浏览器环境中处理自定义URI:
修改表单关闭流程配置:
<property as="xs:string" name="oxf.fr.detail.process.close.*.*"> relinquish-lease then run-client-action(action = "javascript: window.location.href = '{xxf:property('props.services-url')}';") recover summary </property>
保留props.services-url的原有配置即可:
<property as="xs:string" name="props.services-url"> if (xxf:get-request-parameter('Portal') = 'Web') then 'https://some-website.com' else if (xxf:get-request-parameter('Portal') = 'Mobile') then 'my-app://' else '' </property>
方案二:验证参数传递是否正确
确保打开表单时,请求参数Portal=Mobile已正确传递给Orbeon:
- 检查浏览器地址栏是否包含
?Portal=Mobile参数 - 可临时在表单中添加只读控件,绑定表达式
xxf:get-request-parameter('Portal'),直观查看参数值
若参数未正确传递,props.services-url会返回空字符串,导致跳转失败触发recover summary。
方案三:临时硬编码URI测试
为排除参数逻辑干扰,可直接将URI硬编码到流程中测试:
<property as="xs:string" name="oxf.fr.detail.process.close.*.*"> relinquish-lease then run-client-action(action = "javascript: window.location.href = 'my-app://';") recover summary </property>
如果此配置能成功跳转,说明问题出在参数传递或原服务器端navigate动作的兼容性上。
内容的提问来源于stack exchange,提问作者branx
相关产品推荐
相关产品推荐

