了解腾讯公益404
为站点指定404页面
于httpd.conf中找到子站点对应的VirtualHost,在里面添加一项1
ErrorDocument 404 /404.html
即可指定404页面为站点根目录下的404.html
调整返回链接
如上官方页面所言,可以在调用js时传递站点链接来替换默认的返回地址,但我这样调用后发现返回链接仍然指向腾讯。于是查看源码,发现了这一段代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22var homePageUrl, homePageName;
var scs = document.getElementsByTagName("script");
for (var i = 0; i < scs.length; i++)
if (scs[i].src.indexOf("/404/search_children.js") > -1) {
if (scs[i].getAttribute("homePageUrl"))
homePageUrl = scs[i].getAttribute("homePageUrl");
if (scs[i].getAttribute("homePageName"))
homePageName = scs[i].getAttribute("homePageName");
break
}
$scope.rettext = homePageName;
$scope.retlink = homePageUrl;
if (location.href.indexOf("fm.qq.com") > -1 || location.href.indexOf("fm.qzone.qq.com") > -1) {
$scope.rettext = "\u8fd4\u56de\u4f01\u9e45FM";
$scope.retlink = "http://fm.qq.com"
} else if (location.href.indexOf("qzone.qq.com") > -1) {
$scope.rettext = "\u8fd4\u56de\u6211\u7684\u7a7a\u95f4";
$scope.retlink = "http://qzone.qq.com"
} else {
$scope.rettext = "\u8fd4\u56de\u817e\u8baf\u7f51";
$scope.retlink = "http://www.qq.com"
}
可以看出,传递过去的值在执行过后面的if分支后,被替换成腾讯自家地址了,可能是某个粗心程序员修改时没有注意到这一点。
如何解决呢?
实际操作
修改404页面
1 | cd hexo |
之后于1
</body>
前添加1
<script type="text/javascript" src="/js/modify.js" charset="utf-8"></script>
保存并退出vim编辑器
创建modify.js
1 | vi source/js/modify.js |
写入内容1
2
3
4
5
6setTimeout(mod,"1500");
function mod() {
var desc = document.getElementsByClassName("desc_link")[0];
desc.href = "http://twodam.net";
desc.innerHTML = "回到博客";
}
保存并退出vim编辑器1
hexo g d
重新生成并部署
简单讲解modify.js
这个js很简单,就是单纯的修改文本和链接。第一行是延迟1.5s处理,然后mod方法里通过class名获取对象,修改href和innerHTML也就是链接和文本。
href内填目标链接,innerHTML内填目标文本即可。
根据需要可以修改延迟的时间。
新的进展
更新自2018.03.17
最近发现这个问题修复了,还找到了在知乎上相关的讨论。
代码方面,从之前的链接看过去,内容改为了1
2
3var _base = 'http://qzone.qq.com/gy/404/';
document.write('<script type="text/javascript" src="' + _base + 'data.js" charset="utf-8"></script>');
document.write('<script type="text/javascript" src="'+ _base + 'page.js" charset="utf-8"></script>');/* |xGv00|bb048611f4d0bb34934fd40353d94edf */
进一步的定位到新的page.js
中相关代码部分,发现获取并设置返回链接的代码位置已经修复:
1 | var homePageUrl, homePageName; |
而在官方的公益404页面中的js相关代码如下:
1 | for (var k = |
很明显这个版本的代码也是没有问题的了。