定制 gh-page 404 页面

背景

就我的看法来说,网站的404页面。还是很必要的。

404 的成因,是多种多样的,大多数404 成因是: 链接在传递、报错过程中发生错误,链接屏蔽下线等。

gh-page 解决方案

在生成的站点的根目录下,能找到 404.html 即可

具体实现,动态,静态都可。

我的实现

公益404页面

参考链接 http://www.qq.com/404/

遇到问题

同时我们提供“返回腾讯网”这个超链接的可定制化能力,修改“homePageUrl”、“homePageName”两个参数即可。

上述配置,为达到预期,不能实现

解决方案

将 公益404 页面,嵌入bqxu.me 404 页面的iframe 中,动态修改返回按钮的事件。

直接上代码

  • 我的 /404.html
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=utf-8;"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  <meta name="robots" content="all"/>
  <meta name="robots" content="index,follow"/>
  <title>404-bqxu.me</title>
  <style>
    body {
      padding: 0;
      margin: 0;
    }

    iframe {
      width: 100vw;
      height: 100vh;
    }
  </style>
</head>
<body>

<iframe src="/404_inner.html" frameborder="0" id="404_inner">

</iframe>
</body>
<script>
  var interval;
  var initFunc = function () {
    if (interval) {
      clearInterval(interval);
    }
    interval = setInterval(interValFunc, 300);
  };
  var interValFunc = function () {
    var contentWindow = document.getElementById("404_inner").contentWindow;
    var contentDocument = contentWindow.document;
    var desc_link = contentDocument.getElementsByClassName('desc_link');
    var link_view = contentDocument.getElementsByClassName('link_view');
    var bottom_logo = contentDocument.getElementsByClassName('bottom_logo');
    if (desc_link && desc_link[0]) {
      desc_link = desc_link[0];
      desc_link.innerHTML = '回到 首页';
      desc_link.href = 'javascript:clickBack()';
      if (link_view && link_view[0]) {
        link_view = link_view[0];
        link_view.setAttribute('target', '_blank');
      }
      if (bottom_logo) {
        bottom_logo = bottom_logo[0];
        var alist = bottom_logo.querySelectorAll('.bottom_logo a');
        for (var key in alist) {
          var a = alist[key];
          a.setAttribute && a.setAttribute('target', '_blank');
        }
      }
      contentWindow.clickBack = function () {
        window.location.href = 'http://bqxu.me';
      };
      var children_list = contentDocument.getElementsByClassName('children_list');
      if (children_list) {
        children_list = children_list[0];
        children_list.removeEventListener('click', initFunc);
        children_list.addEventListener('click', initFunc);
      }
      if (interval) {
        clearInterval(interval);
      }
    }
  };
  interval = setInterval(interValFunc, 300);
</script>
</html>
  • 我的 /404_inner.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<script type="text/javascript" src="http://www.qq.com/404/search_children.js" charset="utf-8" homePageUrl="http://bqxu.me"
        homePageName="回到我的主页"></script>
</body>
</html>

over 解决问题