在Next.js应用中嵌入Orbeon表单时遇ORBEON未定义错误求助
解决Next.js嵌入Orbeon表单时"ORBEON is undefined"的问题
先加载Orbeon的JavaScript API脚本
ORBEON对象是由Orbeon官方提供的脚本注入的,必须确保该脚本在调用embedForm前加载完成。在Next.js里有两种实现方式:- 在页面头部静态引入脚本
在页面的Head组件中添加脚本标签,路径需匹配你的Orbeon部署地址:import Head from 'next/head'; function JobApplicationForm() { return ( <> <Head> <script src="/orbeon/xforms-server.js" type="text/javascript"></script> </Head> <div id="my-container-element"></div> </> ); } export default JobApplicationForm; - 动态加载脚本(按需加载场景)
用useEffect在组件挂载时动态创建脚本,确保脚本加载完成后再执行表单嵌入逻辑:import { useEffect } from 'react'; function JobApplicationForm() { useEffect(() => { const loadOrbeonScript = () => { return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = '/orbeon/xforms-server.js'; script.type = 'text/javascript'; script.onload = resolve; script.onerror = reject; document.body.appendChild(script); }); }; loadOrbeonScript() .then(() => ORBEON.fr.API.embedForm( document.getElementById("my-container-element"), "/orbeon", "human-resources", "job-application", "new" )) .then(() => console.log("`embedForm()` successfully loaded the form")) .catch(e => { console.log("`embedForm()` returned an error"); console.log(e); }); }, []); return <div id="my-container-element"></div>; } export default JobApplicationForm;
- 在页面头部静态引入脚本
验证脚本路径与跨域配置
确认脚本src路径和Orbeon实际部署路径一致:如果Orbeon部署在独立域名,需使用完整绝对URL,同时确保Orbeon服务器配置了CORS,允许你的Next.js域名加载该脚本。适配Next.js SSR/SSG场景
若页面采用服务端渲染(SSR)或静态生成(SSG),不能在组件初始化阶段直接调用ORBEON——此时浏览器环境尚未加载脚本。上述useEffect方案可避免这个问题,因为它仅在客户端渲染阶段执行。
内容的提问来源于stack exchange,提问作者rush2
相关产品推荐
相关产品推荐

