按钮无法使用与数学公式无法显示bug修复

bug发现

7月17日,当再次提交一个新的博客内容后,发现提交到github上的网页无法正常显示(但在本地localhost上是正常的),直观上有以下几个问题:

  • 按钮点击无效,如一键回顶部、白天黑夜模式调整
  • 数学公式无法正常显示


bug排查

怀疑文件问题

因为这个文件是我post一个新文章后才发现的,所以自然而然怀疑这篇文章有问题。删除掉文章后发现问题依旧存在,因此初步排除了文章本身的问题。

怀疑代码问题

F12进入开发者模式,发现很多报错:

经过分析,其中最主要的也是最直接导致错误的应该是如下错误:

简单来说本网页使用的是https,但在加载过程中出现了http请求,请求混用从而http请求被block,这也就导致一些js组件无法被加载,反映到网页中就是无法正常执行功能。

接下来的任务就是如何解决http请求。


bug解决

网上资料

搜索了一些资料,解决措施也大差不差,最直接的方式是增加一行代码:

1
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

但因为本博客的Html生成是靠着hexomd文件转写得到的,我不知道如何直接修改其编辑逻辑,于是暂时搁置了这个方案,转而去代码中寻找到底哪里出现了http请求。

代码修改——解决

浏览生成的网页代码,很容易发现里面并没有http://xxxx,相反,全部都是https://xxxx,这就很奇怪了。

进一步看报错位置所涉及的文件,将报错的文件名反向去Html中寻找,如:

1
2
<!--报错中无法请求pace.min.js文件-->
<script src="https://cdn.staticfile.net/pace/1.2.4/pace.min.js"></script>

大概搜了几个,发现报错的资源地址都是"https://cdn.staticfile.net/xxx形式。

直接去搜索这个网址会直接跳转到https://cdn.staticfile.net/xxx,本质上他们应该指向一个地方。这个地方恰好也是我在控制台中搜索其对应http://报错所得到的内容,这便启示我可能是"https://cdn.staticfile.net/xxx的形式不正确,将org改为net即可。

尝试后问题解决,一切恢复正常:

最终写一个python脚本,遍历编译生成的所有网页源代码,将其中对应的内容进行修改即可::

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import os
import re
current_directory = '.'
html_file_pattern = re.compile(r'.*\.html$', re.IGNORECASE)
def replace_org_with_net(content):
return re.sub(r'cdn.staticfile.net', 'cdn.staticfile.net', content)
for root, dirs, files in os.walk(current_directory):
for file in files:
if html_file_pattern.match(file):
file_path = os.path.join(root, file)
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
new_content = replace_org_with_net(content)
with open(file_path, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f'Updated file: {file_path}')
print('Finished processing all HTML files.')

bug猜想

可能是网站协议发生了更新,导致之前可行的方案如今变得不可行。

当然这个问题可能也反映出我安装的库有一些老旧了,但是毕竟好久没有接触到这个环境,我也不太敢去乱动什么,因此才采用了这种较为“麻烦”的方案来进行解决

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
Runtime Display
  • Copyrights © 2023-2024 Lucas
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信