typecho使用Pjax小结

记我在制作PureLoveForTypecho主题时, 使用Pjax遇到的一些问题

Pjax用法

引入类库后 在主题footer.php里添加以下代码即可

$(document).pjax('a[href^="<?php Helper::options()->siteUrl()?>"]:not(a[target="_blank"], a[no-pjax])', {
    container: '#pjax-container',
    fragment: '#pjax-container',
    timeout: 8000,
});

记坑

1.发现Pjax版本需要与Jquery版本保持某个契合度: 大概是pjax 1.9.x版本应配合jq 2.x版本; pjax2.0.x以上的版本 使用jq 3.x 才能使用, 否则bug bug~

2.标签要闭合: 如果页面上html标签没有写完整, 也会导致pjax无法生效 如<body>没有闭合

3.pjax完成后需要重载其他类库, 如代码高亮

4.评论区错误: 点击回复按钮JS报错后, 无法将评论框定位到回复区(但是刷新一下页面, 就会恢复正常)

Uncaught ReferenceError: TypechoComment is not defined at HTMLAnchorElement.onclick

引起这个原因是: window.TypechoComment对象是typechohead标签里调用$this->header()方法为我们生成的, Pjax加载后window.TypechoComment没有被重新载入进来. 且window.TypechoComment里的respondId 没有被重新生成.

解决方案:
Pjax的替换#pjax-container时, 重新载入window.TypechoComment对象:

<div id="pjax-container">
    <!--commentReply=1 表示仅输出 window.TypechoComment 对象-->
    <?php $this->header('commentReply=1&description=0&keywords=0&generator=0&template=0&pingback=0&xmlrpc=0&wlw=0&rss2=0&rss1=0&antiSpam=0&atom'); ?>
</div>

5.听说要关闭反垃圾保护, 这个我没有验证过.

我来吐槽

*

*

已有 9 条评论

  1. 吃馒头的猫

    亲身实践,是要关闭反垃圾保护才行

    1. Hoe

      学习了,感谢大佬提醒

      1. 吃馒头的猫

        你才是大佬,我只是个菜鸟

  2. 小宇

    之前用了一下,貌似要把“检查评论来源页 URL 是否与文章链接一致”这个关闭掉,不知道你这里有没有关闭。。

    1. Hoe

      我的这个选项是开启的😁, 你那出现什么问题了吗?

      1. 小宇

        貌似解决了,不过我现在没有用PJAX咯

  3. 沙扬娜拉

    比较简洁,挺好的~

  4. 张波博客

    能自己做主题,真好,

  5. 点滴记录

    每一次小结,就是一种进步,加油