Repository: AlistGo/alist (language: go)

Issue:
网页突然无法显示，一片空白
### Please make sure of the following things

- [ ] I have read the [documentation](https://alist.nn.ci).
我已经阅读了[文档](https://alist.nn.ci)。

- [ ] I'm sure there are no duplicate issues or discussions.
我确定没有重复的issue或讨论。

- [ ] I'm sure it's due to `AList` and not something else(such as [Network](https://alist.nn.ci/faq/howto.html#tls-handshake-timeout-read-connection-reset-by-peer-dns-lookup-failed-connect-connection-refused-client-timeout-exceeded-while-awaiting-headers-no-such-host) ,`Dependencies` or `Operational`).
我确定是`AList`的问题，而不是其他原因（例如[网络](https://alist.nn.ci/zh/faq/howto.html#tls-handshake-timeout-read-connection-reset-by-peer-dns-lookup-failed-connect-connection-refused-client-timeout-exceeded-while-awaiting-headers-no-such-host)，`依赖`或`操作`）。

- [ ] I'm sure this issue is not fixed in the latest version.
我确定这个问题在最新版本中没有被修复。


### AList Version / AList 版本

v3.31.0

### Driver used / 使用的存储驱动

aliyunpan_open

### Describe the bug / 问题描述

网页突然无法显示，一片空白，换用新版也是一样，旧版的也是如此，换用不同浏览器也是这样
![微信截图_20240226165719](https://github.com/alist-org/alist/assets/10374085/a1caf8ef-ac55-43c2-86d0-9d43d296ba1b)
![微信截图_20240226165739](https://github.com/alist-org/alist/assets/10374085/f5298a5f-a404-4c89-866a-903c70daac1a)


### Reproduction / 复现链接

无

### Config / 配置

初始配置

### Logs / 日志

_No response_


Discussion / hints:
一模一样的问题我就不开新issue了，昨天晚上还好好的，今天用各类浏览器，重启，重装都没用了，全是一片空白，用的极空间NAS  
感觉是依赖了什么第三方的SDK新版有bug造成的
> 感觉是依赖了什么第三方的SDK新版有bug造成的

试了一下，polyfill.io返回的东西有问题，F12里阻止polyfill.io之后正常了，用Edge 121访问请求的[polyfill地址](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll)返回了一堆内容，而按polyfill.io上的操作[加上版本号](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0)后就不返回任何代码

补充：
F12阻止polyfill.io后，编辑AList管理-“设置”-“全局”内的“自定义头部”，添加“&version=3.111.0”即可修复
```<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll">```
修改为
```<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0">```
https://al.nn.ci/

未能复现
> https://al.nn.ci/
> 
> 未能复现

同样无法显示，清下缓存或者在无痕模式下打开试试
![image](https://github.com/alist-org/alist/assets/10374085/fd093387-d804-46f4-99d9-bcd80208a94a)





> > 感觉是依赖了什么第三方的SDK新版有bug造成的
> 
> 试了一下，polyfill.io返回的东西有问题，F12里阻止polyfill.io之后正常了，用Edge 121访问请求的[polyfill地址](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll)返回了一堆内容，而按polyfill.io上的操作[加上版本号](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0)后就不返回任何代码
> 
> 补充： F12阻止polyfill.io后，编辑AList管理-“设置”-“全局”内的“自定义头部”，添加“&version=3.111.0”即可修复 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll">` 修改为 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0">`

确实右键屏蔽这个请求后恢复正常

![image](https://github.com/alist-org/alist/assets/10374085/ff8f395a-bef8-4bb5-84ff-9b7764717a83)
![image](https://github.com/alist-org/alist/assets/10374085/6c822e34-07a0-4da6-816e-7ee774bf7a0c)

我这里 https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll 返回的都是正常内容
+1 我也是这种情况，昨天还好好的，没有进行任何操作，今天突然就不行了，360、火狐、edge、chrome都不行

> 我这里 https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll 返回的都是正常内容

所以可能是polyfill对部分地区或者部分浏览器响应有异常，我这里得到的是给string添加replaceAll的代码，加上版本号或者去掉min之后返回空代码
> 我这里 https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll 返回的都是正常内容

我的chrome和edge版本，可以装个Chrome 114试试

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.289 Safari/537.36

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0
我这里也有同样的问题，完全一样
开了代理就正常进
+1 firefox浏览器也有同样的问题
AList打开空白的 进入后台 --> 全局 --> 自定义头部里面换一下  

<!--Alist V3建议添加的，已经默认添加了，如果你的没有建议加上-->
```html
<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
```
换成这个阿里的（**直接删了也可以，但是可能会导致其他人访问时候浏览器如果不兼容会打不开**）
```html
<script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
```

不知道怎么进后台的  https://域名/@manage

如果还是出现请使用 **`Ctrl+F5`** 刷新网页，或者是否使用美化教程里面也携带了上面提到的 js静态资源，检查一下
- 手机用户修改好后 清理浏览器缓存
手机via浏览器出现相同白屏情况，按上面说法更换自定义头部后恢复正常
恢复正常
+1
遇到了同样的问题，按照 上面的方法改成 阿里的正常了
> > 感觉是依赖了什么第三方的SDK新版有bug造成的
> 
> 试了一下，polyfill.io返回的东西有问题，F12里阻止polyfill.io之后正常了，用Edge 121访问请求的[polyfill地址](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll)返回了一堆内容，而按polyfill.io上的操作[加上版本号](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0)后就不返回任何代码
> 
> 补充： F12阻止polyfill.io后，编辑AList管理-“设置”-“全局”内的“自定义头部”，添加“&version=3.111.0”即可修复 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll">` 修改为 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0">`

加&version=3.111.0貌似会影响手机端访问，不能自适应。alicdn正常
> > > 感觉是依赖了什么第三方的SDK新版有bug造成的
> > 
> > 
> > 试了一下，polyfill.io返回的东西有问题，F12里阻止polyfill.io之后正常了，用Edge 121访问请求的[polyfill地址](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll)返回了一堆内容，而按polyfill.io上的操作[加上版本号](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0)后就不返回任何代码
> > 补充： F12阻止polyfill.io后，编辑AList管理-“设置”-“全局”内的“自定义头部”，添加“&version=3.111.0”即可修复 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll">` 修改为 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0">`
> 
> 加&version=3.111.0貌似会影响手机端访问，不能自适应。alicdn正常

这个可能和浏览器有关，足够新的浏览器支持string的replaceAll方法，不需要这个polyfill，只有不支持的会出问题，不过可能还是polyfill.io的逻辑出故障了，不能正确识别浏览器是否支持对应的方法
感觉alist可以添加一个导出并使用该静态文件模板的命令
估计就是 `polyfill.io` 的bug，版本判断错误了，导致本来不需要polyfill的浏览器也返回了polyfill代码，新浏览器本来就有`String.replaceAll` 方法并且被设置为了只读字段，导致修改字段失败。

建议直接在 alist-web 代码里把这个方法的 polyfill 从 core-js 直接 import 算了，反正这个代码也不算很长，这样就不用依赖 `polyfill.io` 动态返回的代码了。

> > 感觉是依赖了什么第三方的SDK新版有bug造成的
> 
> 试了一下，polyfill.io返回的东西有问题，F12里阻止polyfill.io之后正常了，用Edge 121访问请求的[polyfill地址](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll)返回了一堆内容，而按polyfill.io上的操作[加上版本号](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0)后就不返回任何代码
> 
> 补充： F12阻止polyfill.io后，编辑AList管理-“设置”-“全局”内的“自定义头部”，添加“&version=3.111.0”即可修复 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll">` 修改为 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0">`

按照你的方法成功打开了
> > 感觉是依赖了什么第三方的SDK新版有bug造成的
> 
> 试了一下，polyfill.io返回的东西有问题，F12里阻止polyfill.io之后正常了，用Edge 121访问请求的[polyfill地址](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll)返回了一堆内容，而按polyfill.io上的操作[加上版本号](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0)后就不返回任何代码
> 
> 补充： F12阻止polyfill.io后，编辑AList管理-“设置”-“全局”内的“自定义头部”，添加“&version=3.111.0”即可修复 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll">` 修改为 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0">`


遇到了同样的问题，我在本地打开正常，公网访问一篇空白，按此方法设置后正常访问。

> AList打开空白的 进入后台后台 全局 自定义头部里面换一下
> 
> ```
> <script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```
> 
> 换成这个阿里的
> 
> ```
> <script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```
> 
> 直接删了也可以，但是可能会导致其他人访问时候浏览器如果不兼容会打不开
> 
> 不知道怎么进后台的 [https://域名/@manage](https://%E5%9F%9F%E5%90%8D/@manage)

按这个方法解决了，十分感谢！
> AList打开空白的进入后台后台全局自定义头部里面换一下
> 
> ```
> <script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```
> 
> 换成这个阿里的
> 
> ```
> <script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```
> 
> 直接删除了也可以，但是可能会导致其他人访问时浏览器如果不兼容会打不开
> 
> 不知道怎么进后台的 [https://域名/@manage](https://%E5%9F%9F%E5%90%8D/@manage)

给了可以进但是有报错“System error: Error: [Hope UI]: useColorMode must be used within a HopeProvider”正常吗
3.10版本也存在这个问题
有同样的问题，但是开了代理就莫名其妙好了，用了大佬的方法，可行
我的是手机空白，电脑正常，在电脑上把 polyfill 删了就都正常了
同样问题。昨天开始出现的。卸载了换最新版本也不行。按照上面大佬说的可以了。
我也是突然就白屏问题，重装了都不管用，用了chrome，edge，QQ浏览器都不行，内外网都白屏（包括手机的数据网络）阻止polyfill.io就能正常访问了
同样是这样的情况 希望尽快修复, 感谢
挂梯子后才能正常打开
同样的情况
出现相同问题，非代理环境下白屏。
可能和这个有关系？https://github.com/polyfillpolyfill/polyfill-service/issues/2834
可能需要换成新的 https://polyfill-fastly.io/v3/polyfill.min.js?features=String.prototype.replaceAll 地址
> AList打开空白的

把<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll">改掉，确实能打开网页了。
高手在民间，删除后，确实正常了。
一样，平板正常访问

遇到同样的问题，感谢高人出手相助。
> ```
> <script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```

白屏按此方法可以解决
先进进后台的 [https://域名、IP/@manage]，再修改
> AList打开空白的 进入后台 --> 全局 --> 自定义头部里面换一下
> 
> ```
> <script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```
> 
> 换成这个阿里的（**直接删了也可以，但是可能会导致其他人访问时候浏览器如果不兼容会打不开**）
> 
> ```
> <script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```
> 
> 不知道怎么进后台的 [https://域名/@manage](https://%E5%9F%9F%E5%90%8D/@manage)
> 
> 如果还是出现请使用 **`Ctrl+F5`** 刷新网页，或者是否使用美化教程里面也携带了上面提到的 js静态资源，检查一下
> 
> * 手机用户修改好后 清理浏览器缓存

我把 polyfill.io 走了代理也不行，还是换了地址解决了，感谢！
> AList打开空白的 进入后台 --> 全局 --> 自定义头部里面换一下
> 
> ```
> <script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```
> 
> 换成这个阿里的（**直接删了也可以，但是可能会导致其他人访问时候浏览器如果不兼容会打不开**）
> 
> ```
> <script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
> ```
> 
> 不知道怎么进后台的 [https://域名/@manage](https://%E5%9F%9F%E5%90%8D/@manage)
> 
> 如果还是出现请使用 **`Ctrl+F5`** 刷新网页，或者是否使用美化教程里面也携带了上面提到的 js静态资源，检查一下
> 
> * 手机用户修改好后 清理浏览器缓存

感谢有效~
same issue
更换头部之后所有页面报错
`System error: Error: [Hope UI]: useColorMode must be used within a HopeProvider`
> same issue 更换头部之后所有页面报错 `System error: Error: [Hope UI]: useColorMode must be used within a HopeProvider`

下载最新版本，可以直接替换
加一，我也出现了，今天才发现
统计了一下手头的几个设备的情况

Win11 22H2
Edge 122.0.2365.52 异常
Edge 122.0.2365.59 异常
FireFox 123.0 异常

Win11 23H2
Vivaldi 6.5.3206.63 异常
Edge 122.0.2365.59 异常

Ubuntu 22.04.4 LTS
Edge 122.0.2365.38 beta 正常

Android 14 Xiaomi HyperOS 1.0.6.0
Edge 121.0.2277.133 异常
Vivaldi 6.5.3217.122 异常

iOS 17.3.1
Safari 正常
在网页端播放的时候 你们有没有出现放着放着跳开头 然后又跳回来的问题
改了这个东西后出现的，但我不是很确定是这个导致的
我感觉代码中访问了github.com链接，有的地方github.com被屏蔽了不能访问，所以打开网页就是空白的，部分浏览器储存了上次访问的cookei还能正常访问。
确认就是 polyfill.io 的问题。我测了一下。是区域性的。我的国内服务器和香港服务器返回都是异常的。但是美国和欧洲两个地区是由问题（非本地请求，我直接在服务操作）。建议换成 
https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll
走阿里的代理是最稳妥的。我尝试了一下本地开代理可以正常显示，不开不行。
我的还是不行，进入管理界面的URL是不请求polyfill了，但 https://cdn.jsdelivr.net/gh/alist-org/web-dist@dev/dist/assets/index.44cc2916.js 这个请求还是404，不管我挂不挂代理
页面还是空白的，不管是正常的页面还是管理页面都是空白
> > > 感觉是依赖了什么第三方的SDK新版有bug造成的
> > 
> > 
> > 试了一下，polyfill.io返回的东西有问题，F12里阻止polyfill.io之后正常了，用Edge 121访问请求的[polyfill地址](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll)返回了一堆内容，而按polyfill.io上的操作[加上版本号](https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0)后就不返回任何代码
> > 补充： F12阻止polyfill.io后，编辑AList管理-“设置”-“全局”内的“自定义头部”，添加“&version=3.111.0”即可修复 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll">` 修改为 `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll&version=3.111.0">`
> 
> 加&version=3.111.0貌似会影响手机端访问，不能自适应。alicdn正常

感谢 恢复正常
我把 polyfill.io 这个域名加到代理的路由里面后，polyfill 的请求正常了，但 [index.44cc2916.js](https://cdn.jsdelivr.net/gh/alist-org/web-dist@dev/dist/assets/index.44cc2916.js) 还是404，这个是arm机器上的docker版本，我还有两个PC版的都没问题，心累，虽然不影响通过API调用，但打不开网页，还是很不方便
> 我这里 https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll 返回的都是正常内容

看反馈，国内访问异常。
而且polyfill.io目前受国内菠菜CDN控制，不建议继续使用。
https://github.com/polyfillpolyfill/polyfill-service/issues/2834
可能与此有关。作为替代cloudflare提供了新的endpoint
https://blog.cloudflare.com/polyfill-io-now-available-on-cdnjs-reduce-your-supply-chain-risk

Fix patch:
diff --git a/internal/bootstrap/data/setting.go b/internal/bootstrap/data/setting.go
index 4fd99ca2383..a1558023279 100644
--- a/internal/bootstrap/data/setting.go
+++ b/internal/bootstrap/data/setting.go
@@ -21,7 +21,6 @@ func initSettings() {
 	if err != nil {
 		utils.Log.Fatalf("failed get settings: %+v", err)
 	}
-
 	for i := range settings {
 		if !isActive(settings[i].Key) && settings[i].Flag != model.DEPRECATED {
 			settings[i].Flag = model.DEPRECATED
@@ -42,7 +41,7 @@ func initSettings() {
 			continue
 		}
 		// save
-		if stored != nil && item.Key != conf.VERSION {
+		if stored != nil && item.Key != conf.VERSION && stored.Value != item.DeprecatedValue {
 			item.Value = stored.Value
 		}
 		if stored == nil || *item != *stored {
@@ -129,7 +128,7 @@ func InitialSettings() []model.SettingItem {
 		// global settings
 		{Key: conf.HideFiles, Value: "/\\/README.md/i", Type: conf.TypeText, Group: model.GLOBAL},
 		{Key: "package_download", Value: "true", Type: conf.TypeBool, Group: model.GLOBAL},
-		{Key: conf.CustomizeHead, Value: `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>`, Type: conf.TypeText, Group: model.GLOBAL, Flag: model.PRIVATE},
+		{Key: conf.CustomizeHead, DeprecatedValue: `<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>`, Type: conf.TypeText, Group: model.GLOBAL, Flag: model.PRIVATE},
 		{Key: conf.CustomizeBody, Type: conf.TypeText, Group: model.GLOBAL, Flag: model.PRIVATE},
 		{Key: conf.LinkExpiration, Value: "0", Type: conf.TypeNumber, Group: model.GLOBAL, Flag: model.PRIVATE},
 		{Key: conf.SignAll, Value: "true", Type: conf.TypeBool, Group: model.GLOBAL, Flag: model.PRIVATE},
diff --git a/internal/model/setting.go b/internal/model/setting.go
index b561ad6b221..4ded2582c67 100644
--- a/internal/model/setting.go
+++ b/internal/model/setting.go
@@ -20,13 +20,14 @@ const (
 )
 
 type SettingItem struct {
-	Key     string `json:"key" gorm:"primaryKey" binding:"required"` // unique key
-	Value   string `json:"value"`                                    // value
-	Help    string `json:"help"`                                     // help message
-	Type    string `json:"type"`                                     // string, number, bool, select
-	Options string `json:"options"`                                  // values for select
-	Group   int    `json:"group"`                                    // use to group setting in frontend
-	Flag    int    `json:"flag"`                                     // 0 = public, 1 = private, 2 = readonly, 3 = deprecated, etc.
+	Key             string `json:"key" gorm:"primaryKey" binding:"required"` // unique key
+	Value           string `json:"value"`                                    // value
+	DeprecatedValue string `json:"deprecated_value" gorm:"-:all"`            // deprecated value
+	Help            string `json:"help"`                                     // help message
+	Type            string `json:"type"`                                     // string, number, bool, select
+	Options         string `json:"options"`                                  // values for select
+	Group           int    `json:"group"`                                    // use to group setting in frontend
+	Flag            int    `json:"flag"`                                     // 0 = public, 1 = private, 2 = readonly, 3 = deprecated, etc.
 }
 
 func (s SettingItem) IsDeprecated() bool {


Test patch: