我踩了 72 小时的 Electron webview PDF 灰色坑,只为告诉你:别写这行代码!

这辈子都不想再看到那个该死的灰色背景了!

症状(你绝对中过)

  • 背景是经典 PDF 灰色,但内容永远不显示
  • 连最干净的 dummy.pdf 都只给灰色
  • plugins: true、webSecurity: false、sandbox: false、contextIsolation: false 全开了也没用
  • 甚至加了 app.commandLine.appendSwitch('enable-pdf-extension') 这发核弹都不行
  • 你已经快疯了

终极元凶(就是它!)

JavaScript

php 复制代码
// 主进程里偷偷出现过这行代码,就是它毒死了你整个应用!
session.fromPartition('nocache', { cache: false })

只要这行代码执行过一次,整个默认 session 就被永久污染,PDF Viewer 插件直接原地去世,永不翻身!

正确做法(三步永绝后患)

第一步:立刻删除这行毒代码(必须删,别注释!)

JavaScript

arduino 复制代码
// 删掉!删掉!删掉!重要的事情说三遍
// session.fromPartition('nocache', { cache: false })

第二步:重启软件(必须重启!不清毒永远灰)

被污染的默认 session 只有重启才能清掉。

第三步:以后这样写就天下太平

HTML

css 复制代码
  style="width:100%; height:100vh;"
>



>

为什么加 partition 就活了?

因为 partition="persist:pdfviewer" 给 webview 开了一个全新的、从未被 { cache: false } 污染过的、持久化的独立 session,PDF 插件终于能正常加载了!

亲测有效的终极配置(直接抄)

JavaScript

yaml 复制代码
// main.js(主窗口随便怎么安全都行)
new BrowserWindow({
  webPreferences: {
    webviewTag: true,
    // contextIsolation: true 全开也没事,随便玩
  }
})

HTML

复制代码

验证链接(随便点都亮)

  1. 国际标准:
  2. 国内防盗链:
  3. 企业内网签名链接:随便多长都行

删掉那行毒代码 + 加好 partition → 全部秒显示!

总结(只记这三句话)

  1. 永远不要在主进程写 session.fromPartition('xxx', { cache: false })
  2. PDF webview 必须加 partition="persist:pdfviewer"
  3. 想禁用缓存的 webview 单独加 partition="nocache"

做完这三步,从此与灰色背景永别!

把这篇文章收藏起来,半年后你会含着泪点开它,然后感谢现在的自己

(已救无数后来人,包括半年后的你)

相关推荐
kisshyshy1 分钟前
前端路由进化史:从刷新白屏到SPA,手写一个Hash路由就懂了!
前端·javascript·react.js
保加利亚的风1 小时前
Docker 学习文档(Mac + Docker Desktop 版)
前端·后端
java1234_小锋1 小时前
Vue3专题 - 条件渲染
前端·javascript·vue.js
明月_清风1 小时前
🚀 AI Agent 完全入门指南:从 LLM 到生产落地,新手必懂的 34 个核心概念
前端·后端·ai编程
嘟嘟07171 小时前
从零理解 useRef:React 中操作 DOM 与持久化变量的唯一桥梁
javascript
鸽鸽1 小时前
Vue 3 API 完全指南:从 Options 到 Composition 的进阶之路
前端·vue.js
名字还没想好☜1 小时前
React 用 Portal + Context 实现全局 Toast:一次调用、自动消失与队列管理
前端·javascript·react.js·react·next.js
嘟嘟07171 小时前
摘要 手把手实现路由鉴权守卫,逐行拆解 ProtectRoute、localStorage、Navigate state、useLocation、FormDat
javascript
HjhIron1 小时前
React Router 通关指南:从入门到鉴权,一个项目全搞定
前端