fix: gate WebView sandbox opt-out behind environment variable

This commit is contained in:
leookun
2026-08-04 21:49:26 +08:00
parent a9b406ec30
commit f5a7347f44
2 changed files with 42 additions and 3 deletions
+13 -3
View File
@@ -8,7 +8,9 @@ import (
"encoding/pem"
"io/fs"
"net"
"os"
goruntime "runtime"
"strconv"
"strings"
"time"
@@ -37,6 +39,8 @@ const (
appName = "Cursor助手"
// adRefreshInterval 表示后台广告拉取间隔。
adRefreshInterval = 3 * time.Minute
// disableWebViewSandboxEnv allows affected VDI users to opt out of the WebView2 sandbox.
disableWebViewSandboxEnv = "CURSOR_BYOK_DISABLE_WEBVIEW_SANDBOX"
)
// EmbeddedResources 定义了当前模块中的 EmbeddedResources 类型。
@@ -135,9 +139,7 @@ func Run(resources EmbeddedResources) error {
Handler: application.AssetFileServerFS(resources.Assets),
},
Windows: application.WindowsOptions{
// VDI 环境(如 VMware Horizon)会阻止 WebView2 创建沙箱受限令牌的renderer 进程,导致主窗口白屏。
// --no-sandbox 跳过受限沙箱创建,使渲染进程可以正常启动。
AdditionalBrowserArgs: []string{"--no-sandbox"},
AdditionalBrowserArgs: windowsAdditionalBrowserArgs(),
},
Mac: application.MacOptions{
ActivationPolicy: application.ActivationPolicyAccessory,
@@ -420,6 +422,14 @@ func Run(resources EmbeddedResources) error {
return app.Run()
}
func windowsAdditionalBrowserArgs() []string {
disableSandbox, err := strconv.ParseBool(strings.TrimSpace(os.Getenv(disableWebViewSandboxEnv)))
if err != nil || !disableSandbox {
return nil
}
return []string{"--no-sandbox"}
}
func browserReachableLoopbackBaseURL(listenAddr string) string {
host, port, err := net.SplitHostPort(strings.TrimSpace(listenAddr))
if err != nil || strings.TrimSpace(port) == "" {