Electron开启nodeIntegrationInSubFrames后about:blank iframe不执行preload脚本
关于Electron开启
nodeIntegrationInSubFrames后preload脚本未在about:blank类型iframe执行的问题解答 是否为已知问题
这是Electron目前存在的文档与实现不一致的已知问题,不属于配置错误:
- 按照官方文档描述,开启
nodeIntegrationInSubFrames后preload脚本应当注入所有子帧,但实际实现中,未设置src属性的about:blank空白iframe属于惰性初始化的帧,没有触发正常的导航流程,因此不会走默认的preload注入逻辑。 - 你测试的
nodeIntegration、contextIsolation等配置项确实和该问题无关。
可行的解决方案
以下方案均可解决该问题,可根据你的业务场景选择:
- 主动触发空白iframe的导航:创建无src的iframe后,主动为其设置
src = 'about:blank',或是指向一个本地的空白html文件,触发完整的导航流程,即可触发preload脚本注入。 - 主进程监听子帧创建事件:在主进程监听对应webContents的
frame-created事件,捕获到新的空白子帧创建后,手动调用executeJavaScript方法注入你需要的逻辑,也可以调用子帧的loadURL方法触发导航。 - 主帧preload主动监听动态iframe:在主帧的preload脚本中监听DOM节点插入事件,检测到新创建的空白iframe后,通过
iframe.contentWindow.postMessage配合上下文桥接的方式,将你需要暴露的API传递到空白iframe的上下文当中,无需等待preload自动注入。 - 主动触发空白iframe初始化:如果是业务侧可控的空白iframe,可以在创建后调用
iframe.contentDocument.write('')触发文档初始化,也能触发preload的注入逻辑。
内容的提问来源于stack exchange,提问作者Jiri Sliva
相关产品推荐
相关产品推荐

