BoonKiong.com2026™

人气 96

音画帖应对 discuz 评分机制的妥协方案

文***已获得官方认证 2026-2-25 15:07

Discuz! 论坛评分刷新机制会连带帖子内容一同刷新,通过ES6模块实现特效功能的音画帖基本上无法适配该刷新机制,原因主要是script标签的module属性得不到继承与延续——Discuz刷新模板重置帖子时不支持script标签的 type="module" 的属性设置。为此,如果需要相对完美适配其刷新机制,只能放弃简洁而方便的ES模块,回退到传统加载JS资源的方案。但 Discuz! 又不接受script标签的行内资源加载方式,我们唯一的选择是代码量较大的动态加载方法,下面是类似于过去曾经介绍过的加载JS文件函数:

function loadJs(url, callback) {
    const script = document.createElement('script');
    script.charset = 'utf-8';
    script.src = url;
    script.defer = true;
    script.onload = callback;
    document.head.appendChild(script);
}

函数需要两个参数:参数1是JS文件地址,参数2是一个回调函数,即渲染帖子完整效果的封装函数。函数体中,一,设置编码为 utf-8 以防止非 utf-8 编码的页面出现中文乱码,设置 defer 属性为 true 意在异步执行资源的加载和核心函数的运行次序;二,在资源加载成功后(onload)运行回调函数即待传入的渲染帖子的函数;三,最后将JS资源标签追加到head标签中。为了简洁,函数没有做出错处理,但需要一切正常,特别地,JS文件地址必须有效。

接着将做帖的JS代码封装为一个函数,这里以 tzMaker 非ES版 v5 为例,代码样式如下:

function tzInit() {
    var tz = TZ('pa');
    tz.add('audio', '', '', { src: '音频地址' });
    tz.add('video', '', 'vid', { src: '视频地址' });
    tz.add('img', '', 'ma', { src: '播放器图片地址'}).playmp3();
    tz.bgprog().style('bottom: 20px; color: aliceblue');
    tz.fs().style('right: 20px; top: 20px');
    tz.autoMid();
}

就是说,tz 指令语句全放在一个渲染帖子的初始化函数内,该函数将被 loadJs() 函数作为第二个参数进行回调,这样就可以保证运行秩序的顺延,即JS文件先加载、完了再渲染帖子的具体内容,核心就是 tz 指令所依赖的JS资源已经准备就绪、可以开工。

下来是上述函数的应用示例:

var jsfile = './tz.v5.js';
loadJs(jsfile, tzInit);

注意全局变量要使用 var 关键字声明,不然的话 Discuz! 论坛在评分后的刷新过程中也会抛弃其继承性。

为方便大家使用,下面给出一个完整的基于 tzMaker v5 非ES模块版的代码模板:

<style>
    @import 'https://638183.freep.cn/638183/tzmaker/tz.v5.css';
    .pa { --bg: tan url('帖子背景图片地址') no-repeat center/cover; }
</style>

<div class="pa"></div>

<script>
    var jsfile = 'https://638183.freep.cn/638183/tzmaker/tz.v5.min.js';

    loadJs(jsfile, tzInit);

    function loadJs(url, callback) {
        const script = document.createElement('script');
        script.charset = 'utf-8';
        script.src = url;
        script.defer = true;
        script.onload = callback;
        document.head.appendChild(script);
    }

    function tzInit() {
        var tz = TZ('pa');
        tz.add('audio', '', '', { src: '音频地址' });
        tz.add('video', '', 'pd-vid', { src: 视频地址' });
        tz.add('img', '', 'ma invert', { src: '播放器图片地址',  style: 'bottom: 65px' }).playmp3();
        tz.bgprog().style('bottom: 20px; color: aliceblue');
        tz.fs().style('right: 20px; top: 20px');
        tz.autoMid();
    }
</script>

如果做LRC歌词帖,建议歌词的变量声明也用 var 声明,放在 jsfile 变量声明的上面。另外,如果你有自己的空间,CSS和JS资源文档可以上传到自己的空间,使用时改一下CSS和JS的地址。

【附】动态加载JS文件的函数可以考虑使用 Promise 对象实现,这样可以加入出错处理,增强函数的健壮性能。


文章来源:花潮论坛




<
文***已获得官方认证 2026-2-25 15:16
帖子代码

游客,如果您要查看本帖隐藏内容请回复


回复

使用道具 举报

<
您需要登录后才可以回帖 登录 | 立即注册

您还未登录

随手拍~~:

热门推荐~~:

论坛表情分享...

1、洋葱头 ...

Discuz! X3.5 解决小图标不显示的方法...

我发现大多数使用Discuz! X3.5 都有小图标不能显示的问题,提问的时候大家给的回答都是说跨域的问题, ...

如何在 discuz 帖子里添加 APlayer 音乐播...

1、首先将下边的 APlayer.css 和 APlayer.js 代码下载然后解压上传到服务器。 2、单曲音乐的代 ...

Discuz! 相关帖子功能修改随机显示不依赖标...

打开 source/module/forum/forum_viewthread.php 文件,查找: 换行添加: 再查找: 换行添 ...

Discuz! X3.5 手机版 logo 的路径...

打开以下的模板文件,搜索 logo_m.svg 1.template/default/touch/portal/index.htm 2.template/def ...

热度会员~~:

文強berrybkboonkiongadmin老谟深虑TaC9528huaekinteresabitchJCYSORALINc.t.teo

免责声明~~:


本站内容来源于合作伙伴及网络搜集,版权归原作者所有。如有侵犯版权,请立刻和本站联系,我们将在三个工作日内予以改正。
Email:hsbk@hotmail.com

手机App~~:

服务与条款|隐私政策|免责声明|手机版|小黑屋|网站地图|友链申请| 文强阁

Powered by Discuz! X3.5|© 2001-2026 Discuz! Team. |本站总访问量已经运行: