🐛 fix(review): 弹窗内切换排序加载失败,评论页固定顶栏
- 评论页注入绝对 API_BASE:弹窗 WebView(loadDataWithBaseURL) 中相对路径 fetch 解析不可靠,切换排序/懒加载/回复全部改走绝对地址 - externalBaseURL 识别 X-Forwarded-Proto:正文气泡 ident 与评论页地址 不再硬编码 http://,避免反代 301 - 布局改造:顶栏固定(含拖拽把手视觉)+评论区独立滚动容器,滚动/回顶 逻辑迁移至容器;switchSort 显式传参替代隐式 event
This commit is contained in:
1 parent
99826c6d25
commit
af9004adaf
3 files changed
+70
-37
No files matched your search
@@ -12,6 +12,16 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// externalBaseURL 取外部可访问的基础 URL(nginx 反代下识别 X-Forwarded-Proto,
|
||||
// 避免生成 http:// 链接被 301,弹窗 WebView 内 fetch 对 301 处理不稳)
|
||||
func externalBaseURL(r *http.Request) string {
|
||||
scheme := "http"
|
||||
if p := r.Header.Get("X-Forwarded-Proto"); p != "" {
|
||||
scheme = p
|
||||
}
|
||||
return scheme + "://" + r.Host
|
||||
}
|
||||
|
||||
// validateParams 验证必需参数
|
||||
func validateParams(r *http.Request, required ...string) (map[string]string, error) {
|
||||
params := make(map[string]string)
|
||||
@@ -207,7 +217,7 @@ func HandleReviewHTML(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
|
||||
html := generateReviewHTML(data, params["item_id"], bookID, para, page, pageSize, sort)
|
||||
html := generateReviewHTML(r, data, params["item_id"], bookID, para, page, pageSize, sort)
|
||||
fmt.Fprint(w, html)
|
||||
}
|
||||
|
||||
@@ -318,6 +328,7 @@ var reviewTmpl = template.Must(template.New("review").Parse(reviewHTML))
|
||||
// reviewPageData 评论页模板数据
|
||||
type reviewPageData struct {
|
||||
ItemID, BookID string
|
||||
BaseURL string
|
||||
ParaPlus1, Para, Sort int
|
||||
Total, NextOffset int
|
||||
PageSize, CommentCount int
|
||||
@@ -327,7 +338,7 @@ type reviewPageData struct {
|
||||
}
|
||||
|
||||
// generateReviewHTML 生成评论 HTML 页面
|
||||
func generateReviewHTML(data map[string]interface{}, itemID, bookID string, para, page, pageSize, sort int) string {
|
||||
func generateReviewHTML(r *http.Request, data map[string]interface{}, itemID, bookID string, para, page, pageSize, sort int) string {
|
||||
total := 0
|
||||
hasMore := false
|
||||
nextOffset := 0
|
||||
@@ -383,6 +394,7 @@ func generateReviewHTML(data map[string]interface{}, itemID, bookID string, para
|
||||
var b strings.Builder
|
||||
if err := reviewTmpl.Execute(&b, reviewPageData{
|
||||
ItemID: itemID, BookID: bookID,
|
||||
BaseURL: externalBaseURL(r),
|
||||
ParaPlus1: para + 1, Para: para, Sort: sort,
|
||||
Total: total, NextOffset: nextOffset,
|
||||
PageSize: pageSize, CommentCount: len(pageComments),
|
||||
|
||||
Reference in new issue
Block a user