You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo13模板script标签中JS字典取值返回undefined问题如何解决

问题原因
  • 核心原因是代码中的hidden_page_number回调函数未被触发:只有页面中存在class="hidden_page_number"的DOM元素时,才会执行回调给vars['hiddenNumber']赋值,若没有匹配元素,该变量自然为undefined。你观察到elt.style.visibility = "hidden"生效,是测试时单独执行的结果,实际运行中该行代码从未被调用。
  • window未定义是wkhtmltopdf 0.12.5的运行环境特性:该版本基于QtWebKit内核,没有完全暴露浏览器标准的window全局对象,无法直接通过window挂载全局变量。
解决方案
  1. 首先确保你的Odoo报告模板中存在带class="hidden_page_number"的元素,可手动插入一个隐藏的占位元素:
<span class="hidden_page_number" style="display:none"></span>
  1. 给vars对象的相关字段设置默认兜底值,避免未赋值时报错,同时补全代码的边界判断逻辑。
修改后的完整代码
<script>
function subst() {
    var vars = {
        // 新增默认值兜底,避免未赋值时返回undefined
        hiddenNumber: '0',
        sitepages: '0'
    };
    var x = document.location.search.substring(1).split('&');
    for (var i in x) {
        var z = x[i].split('=', 2);
        vars[z[0]] = unescape(z[1]);
    }
    // 新增非空判断,避免vars['webpage']不存在时报错
    var index = vars['webpage'] ? vars['webpage'].split('.', 4)[3] : '';

     var operations = {
        // other operations
        'hidden_page_number': function (elt) {
            elt.style.visibility = "hidden";
            // 新增非空判断,避免innerHTML为空
            vars['hiddenNumber'] = elt.innerHTML || '0';
        },
     };

     for (var klass in operations) {
         var y = document.getElementsByClassName(klass);
         for (var j=0; j<y.length; ++j) {
             operations[klass](y[j]);
         }
     }

     var fromPage = document.getElementsByClassName('page');
     for(var j = 0; j<fromPage.length; j++) {
         fromPage[j].textContent = vars['hiddenNumber'];
     }

     var toPage = document.getElementsByClassName('topage');
     for(var j = 0; j<toPage.length; j++) {
         toPage[j].textContent = vars.sitepages;
     }
}
</script>

调试排查可在Odoo调用wkhtmltopdf的参数中添加--debug-javascript,查看JS运行日志确认回调是否被正常触发。

内容的提问来源于stack exchange,提问作者Karolis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:45:02