前言
因为pjax一般来说是通过服务端获取html的dom并渲染,而js并不会重新加载,这导致一些根据dom元素加载的js有问题,比如mathjax,lightjs等,都是根据内容的形式来渲染,一般会存在一个init()函数,但是pjax请求不会重新执行init(),从而导致js失效 解决办法
所以解决思路就是再重新执行回调函数进行渲染
参考
解决
function init() {
$.getScript("https://cdnjs.loli.net/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS-MML_HTMLorMML",
function() {
var math = document.getElementsByClassName("entry-content")[0];
MathJax.Hub.Config({
showProcessingMessages: false,//关闭js加载过程信息
messageStyle: "none", //不显示信息
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [
["$", "$"]
], //行内公式选择$
displayMath: [
["$", "$"]
], //段内公式选择$
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code', 'a'] //避开某些标签
},
"HTML-CSS": {
availableFonts: ["STIX", "TeX"], //可选字体
showMathMenu: false //关闭右击菜单显示
} });
MathJax.Hub.Queue(["Typeset", MathJax.Hub, math]) }) } ... $(document).on('pjax:complete', function() { init(); })
};
$(document).on('pjax:complete', function() {
init();
})
但是有个问题是如何把这个js脚本加进去,开始时,我在footer.php看到这么一行注释,所以理所当然的认为就直接加在后面即可
但是奇怪的是,加入的脚本根本没执行,上网搜索如何添加自定义脚本,才了解正常应该是自己在js文件夹里建一个js文件,然后在function.php调用。这样需要把路径写明,还有一种简单的方法,使用Custom Css & js这个插件。
使用该插件时候,需要将markdown书写博客(WP Githuber MD)的插件关闭,否则会造成冲突。
注意不要使用$而使用jQuery替代,原因见其他博文
结语
本质上两种方式一致,插件同样是创建一个js文件然后php中引用,但是省去我们写引用的部分
Comments NOTHING