fix: force desktop viewport for exported html reports (#147)

This commit is contained in:
clown145
2026-04-01 21:45:58 +08:00
committed by GitHub
parent 692df4b0c9
commit befcc2ad49
@@ -26,6 +26,12 @@ from .templates import HTMLTemplates
MAX_CONCURRENT_DOWNLOADS = 10 MAX_CONCURRENT_DOWNLOADS = 10
AVATAR_CACHE_EXPIRE_TIME = 259200 AVATAR_CACHE_EXPIRE_TIME = 259200
_VIEWPORT_TAG_PATTERN = re.compile(
r'<meta\s+name=["\']viewport["\'][^>]*>', re.IGNORECASE
)
_DESKTOP_VIEWPORT_TAG = (
'<meta name="viewport" content="width=1280, viewport-fit=cover">'
)
class ReportGenerator(IReportGenerator): class ReportGenerator(IReportGenerator):
@@ -409,6 +415,7 @@ class ReportGenerator(IReportGenerator):
logger.error("HTML报告渲染失败:返回空内容") logger.error("HTML报告渲染失败:返回空内容")
return None, None return None, None
html_content = self._force_desktop_viewport(html_content)
logger.info(f"HTML 内容生成完成,长度: {len(html_content)} 字符") logger.info(f"HTML 内容生成完成,长度: {len(html_content)} 字符")
# 保存 HTML 文件 # 保存 HTML 文件
@@ -479,6 +486,24 @@ class ReportGenerator(IReportGenerator):
encoded_relative_url = quote(relative_url, safe="/") encoded_relative_url = quote(relative_url, safe="/")
return caption + f"\n{base_url.rstrip('/')}/{encoded_relative_url}" return caption + f"\n{base_url.rstrip('/')}/{encoded_relative_url}"
@staticmethod
def _force_desktop_viewport(rendered_html: str) -> str:
"""统一导出 HTML 的 viewport,避免移动端按窄屏重排。"""
if _VIEWPORT_TAG_PATTERN.search(rendered_html):
return _VIEWPORT_TAG_PATTERN.sub(
_DESKTOP_VIEWPORT_TAG, rendered_html, count=1
)
head_close = rendered_html.lower().find("</head>")
if head_close != -1:
return (
rendered_html[:head_close]
+ f" {_DESKTOP_VIEWPORT_TAG}\n"
+ rendered_html[head_close:]
)
return f"{_DESKTOP_VIEWPORT_TAG}\n{rendered_html}"
def generate_text_report(self, analysis_result: dict) -> str: def generate_text_report(self, analysis_result: dict) -> str:
"""生成文本格式的分析报告""" """生成文本格式的分析报告"""
stats = analysis_result["statistics"] stats = analysis_result["statistics"]