2019JAVA中ajax不高亮_解决AJAX(PJAX)下代码高亮无法渲染的问题

在使用Pure Highlightjs插件的WordPress站点中,遇到AJAX加载内容时代码高亮不显示的问题。通过分析插件源码,发现hljs.initHighlightingOnLoad()在AJAX环境下无效。采用动态加载js文件的方法loadscript,并改用hljs.initHighlighting()在AJAX完成时执行,成功解决了代码高亮渲染问题。
摘要由CSDN通过智能技术生成

我在用的wordpress代码高亮插件是Pure Highlightjs,很轻便简洁的一款高亮插件。在做本站这套主题的时候,发现一个问题

当页面通过AJAX的方式加载的时候,内容页的代码高亮部分无法渲染,也就是高亮插件没有加载

722910746f0b50e057343239875fcf68.gif

考虑到AJAX的原理,初步判断是负责渲染的js没有执行,于是就找插件的代码看了一通,发现关键的部分

hljs.initHighlightingOnLoad();

722910746f0b50e057343239875fcf68.gif

于是就把这句加到AJAX执行后的complete事件里……发现居然不生效……好吧,继续摸索

接着又想到可能还需要在AJAX时重新加载一下高亮所需的js文件,于是网上就找了几个动态加载js文件的函数,最终找到一个比较完美的,可以设置动态加载js文件完成后的事件

//loadJS

function loadscript(url, callback){

var script = document.createElement ("script")

script.type = "text/javascript";

if (script.readyState){

script.onreadystatechange = function(){

if (script.readyState == "loaded" || script.readyState == "complete"){

script.onreadystatechange = null;

callback();

}

};

} else {

script.onload = function(){

callback();

};

}

script.src = url;

document.getElementsByTagName("head")[0].appendChild(script);

}

使用:

loadscript(highlight_pluginUrl,function () {

hljs.initHighlightingOnLoad();

});

我擦,居然还不生效……奇了怪的,继续返回去研究高亮插件的代码,原来是基于Pure Highlightjs这款插件是基于highlight.js项目的

它的高亮渲染调用方法有 initHighlightingOnLoad 、initHighlighting 等,而之前用的 initHighlightingOnLoad 是页面加载事件,所以需要更换一下调用方法

loadscript(highlight_pluginUrl,function () {

hljs.initHighlighting();

});

丢到AJAX的complete事件,完美!

722910746f0b50e057343239875fcf68.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值