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

Nunjucks+Express搭建站点页面跳转后Prismic获取的script无法加载

问题根因

你遇到的是无刷新客户端导航的典型问题:站点大概率启用了PJAX、Turbo或自定义的无刷页面切换逻辑,跳转页面时只会替换主体区域的DOM,浏览器不会自动执行新插入DOM中的外部<script>标签。只有整页刷新时浏览器会全量解析执行页面所有脚本,因此出现刷新生效、跳转失效的情况。

解决方案

通用方案(兼容所有导航逻辑)

把静态脚本标签改为动态加载,每次页面切换完成后主动触发脚本执行:

  1. 调整详情页Nunjucks模板,用自定义属性存储脚本地址,不直接写静态script标签:
---
layout: _layout.njk
permalink: "/{{ post.blogType }}/{{ post.uid }}/"
pagination:
    alias: post
    data: posts
    size: 1
    addAllPagesToCollections: true
---

{% set params = item.primary.sumo_form_id.split("=") %}
<div class="_form_{{params[1]}}" data-ac-script="{{item.primary.sumo_form_id}}">
</div>
  1. 在全局通用JS文件中添加加载逻辑,同时监听整页加载和无刷新导航完成事件:
function loadACForm() {
  const formWrap = document.querySelector('[data-ac-script]');
  // 页面没有表单或脚本已加载就跳过
  if (!formWrap || formWrap.dataset.loaded) return;

  const script = document.createElement('script');
  script.src = formWrap.dataset.acScript;
  script.charset = 'utf-8';
  script.onload = () => {
    formWrap.dataset.loaded = 'true';
  };
  document.body.appendChild(script);
}

// 整页刷新时执行
document.addEventListener('DOMContentLoaded', loadACForm);
// 无刷新导航完成时执行,根据你用的工具选对应的事件即可
// document.addEventListener('turbo:load', loadACForm); // 用Turbo的情况
// document.addEventListener('pjax:complete', loadACForm); // 用PJAX的情况
// 自定义切换逻辑直接在内容替换完成后调用loadACForm()即可

简易方案(适配特定框架)

如果你用的是Turbo类框架,不需要改JS,直接给script标签加框架识别的执行标记即可:

<script src="{{item.primary.sumo_form_id}}" type="text/javascript" charset="utf-8" defer data-turbo="eval"></script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:09:01