Typecho PJAX 评论失败
解决方法
1.关闭反垃圾保护(觉得没有什么用,而且用户体验不好)
2.修改/var/Widget/Security.php文件,在50行左右,修改为如下代码:
    public function getTokenUrl($path)
    {
        $parts = parse_url($path);
        $params = array();
        if (!empty($parts['query'])) {
            parse_str($parts['query'], $params);
        }
        $params['_'] = $this->getToken(preg_replace('/\?_pjax=%23body/', '', $this->request->getRequestUrl()));
        $parts['query'] = http_build_query($params);
        return Typecho_Common::buildUrl($parts);
    }做到这一步就可以正常提交评论了
3.但是评论完会发现,网页地址显示xxx/comment
此时无法继续评论,应重新加载文章,才能继续评论
于是要在PJAX加载完之后执行以下代码:
  var now_url_comment = location.href + ' ';
  history.replaceState(null,'',now_url_comment.replace('/comment ',''));这样就可以在评论提交后,将网页地址改回来
4.恢复 回复评论 功能
在主题的comments.php文件中,添加以下代码:
<script>respondId = '<?php $this->respondId(); ?>';</script>然后在PJAX结束后执行以下代码:
    window.TypechoComment = {
        dom : function (id) {
            return document.getElementById(id);
        },
        create : function (tag, attr) {
            var el = document.createElement(tag);
            for (var key in attr) {
                el.setAttribute(key, attr[key]);
            }
            return el;
        },
        reply : function (cid, coid) {
            var comment = this.dom(cid), parent = comment.parentNode,
                response = this.dom(respondId()), input = this.dom('comment-parent'),
                form = 'form' == response.tagName ? response : response.getElementsByTagName('form')[0],
                textarea = response.getElementsByTagName('textarea')[0];
            if (null == input) {
                input = this.create('input', {
                    'type' : 'hidden',
                    'name' : 'parent',
                    'id'   : 'comment-parent'
                });
                form.appendChild(input);
            }
            input.setAttribute('value', coid);
            if (null == this.dom('comment-form-place-holder')) {
                var holder = this.create('div', {
                    'id' : 'comment-form-place-holder'
                });
                response.parentNode.insertBefore(holder, response);
            }
            comment.appendChild(response);
            this.dom('cancel-comment-reply-link').style.display = '';
            if (null != textarea && 'text' == textarea.name) {
                textarea.focus();
            }
            return false;
        },
        cancelReply : function () {
            var response = this.dom(respondId()),
            holder = this.dom('comment-form-place-holder'), input = this.dom('comment-parent');
            if (null != input) {
                input.parentNode.removeChild(input);
            }
            if (null == holder) {
                return true;
            }
            this.dom('cancel-comment-reply-link').style.display = 'none';
            holder.parentNode.insertBefore(response, holder);
            return false;
        }
    };此段代码从/var/Widget/Security.php文件中摘出
我做了这些修改后,就可以恢复正常评论了
			赏
			

 
		
		        
    
支付宝红包

支付宝

微信
纯字母纯数字我都实验过了,测试不出来,你这也是
怎么测试这个反垃圾保护有没有效果啊 我想试试我的主题
我想试试我的主题
回复 @Jrotty:
我把 反垃圾保护 关了
评论屏蔽插件我也只屏蔽了敏感词而已
其他的垃圾评论手动删除
回复 @小さな手は:
哦,我用默认模板也试过了,发下手打的垃圾不会被判断垃圾,不知道怎么测试好233
回复 @Jrotty:
测试
回复 @Jrotty:
设置-评论-开启反垃圾保 打钩√,然后自己发几条评论
如果认为是垃圾评论的话,提交的评论是不会被保存的
回复 @小さな手は: