背景

用户电脑安装DTEmpower软件打开白屏,原因是用户的电脑系统注册表有问题,本文做法是python应用程序添加相关minetype兜底

需要添加的minetype如下:

[HKEY_CLASSES_ROOT\.js]
"Content Type"="application/javascript"

[HKEY_CLASSES_ROOT\.mjs]
"Content Type"="application/javascript"

[HKEY_CLASSES_ROOT\.css]
"Content Type"="text/css"

[HKEY_CLASSES_ROOT\.html]
"Content Type"="text/html"

[HKEY_CLASSES_ROOT\.htm]
"Content Type"="text/html"

[HKEY_CLASSES_ROOT\.json]
"Content Type"="application/json"

[HKEY_CLASSES_ROOT\.svg]
"Content Type"="image/svg+xml"

验证

  1. 启动windows沙盒修改 计算机\HKEY_CLASSES_ROOT\.js

2.如图改乱掉(需要注意:直接删掉所有的其实也能正常打开,但是把如图content type改错就会白屏)

3.打开未添加兜底策略之前的版本

4.打开添加了兜底策略后的版本


相关代码

import logging.config
import mimetypes
from collections.abc import Iterable

from visual_client.config import config

from .build.custom import current_custom
from .conf import app_settings

__all__ = ["init_env"]

logger = logging.getLogger(__name__)

config.app_name = current_custom.app_name
app_settings.setup()


def init_mimetypes():
    mimetypes.add_type("application/javascript", ".js")
    mimetypes.add_type("application/javascript", ".mjs")
    mimetypes.add_type("text/css", ".css")
    mimetypes.add_type("text/html", ".html")
    mimetypes.add_type("application/json", ".json")
    mimetypes.add_type("image/svg+xml", ".svg")


def init_env(widgets=None):
    """visual_client.serve.start_worker 会调用 init_env 初始化环境"""
    from . import env
    from .translator import init_translations

    init_translations()

    init_mimetypes()

    widgets = widgets or [env.toolbox_file]
    if isinstance(widgets, Iterable):
        from .persistence.toolbox import toolbox_mgr

        for path in widgets:
            toolbox_mgr.load(path)
            logger.debug(f"Attach widgets: {path}")