使用 electron 和 electron-forge 加载 本地磁盘资源 img 的问题
最近在学习使用 electron 进行桌面开发一款图片压缩的软件。遇到了加载本地磁盘文件的问题。记录一下其解决方案。
使用 electron 加载本地磁盘文件
- 第一种方法 设置
webPreferences.webSecurity值为false
使用这个方法就是设置Chromium的启动安全参数,允许访问本地资源文件。由于Chromium是不允许在远程地址访问本地资源。只有本地资源访问本地资源,那么问题来了,使用 electron 启动的项目怎么设置访问本地路径资源呢? 代码配置如下
// main.js
const { app, BrowserWindow } = require("electron");
const createWindow = () => {
const mainWindow = new BrowserWindow({
width: 1024,
height: 600,
webPreferences: {
// 设置安全参数
webSecurity: false, // false 之后就可以访问 本地资源文件了
},
});
mainWindow.loadURL("http://localhost:3000"); // 本地服务链接
mainWindow.webContents.openDevTools();
};
app.on("ready", createWindow);
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
<!-- localhost:3000 -->
<div>
<img src="D:/xxxx/xxx.png" />
访问本地图片地址
</div>
这样就可以在electron里正常访问本地资源了。
- 第二种方法,注册自定义协议,来绕过
Chromium安全检查。
// main.js
const { app, BrowserWindow, protocol } = require("electron");
const createWindow = () => {
const mainWindow = new BrowserWindow({
width: 1024,
height: 600,
});
mainWindow.loadURL("http://localhost:3000"); // 本地服务链接
mainWindow.webContents.openDevTools();
};
app.on("ready", createWindow);
app.whenReady().then(() => {
// 注册协议 aaaa 协议名字无所谓 自定义即可
protocol.registerFileProtocol("aaaa", (request, callback) => {
const url = request.url.substr(7);
// 防止url 解析不正常 使用 decodeURI
callback(decodeURI(path.normalize(url)));
});
});
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
<!-- localhost:3000 -->
<div>
<img src="aaaa:///D:/xxxx/xxx.png" />
根据自定义协议名前缀 访问本地图片地址
</div>
使用 electron-forge 加载本地磁盘文件
electron-forge是 electron 的脚手架,类似于,react 的create-react-app或者 vue 的vue-cli,所有配置文件都是已经配置好的,根据需求在往上添加就可以用了。如果加载本地磁盘资源用以上办法还是不太行的。需要再加上一个配置才行。
在forge.config.js或者package.json 设置plugins项,如下
{
"plugins": [
[
"@electron-forge/plugin-webpack",
{
"devContentSecurityPolicy": "`default-src 'self' 'unsafe-inline' data:;`", //设置 devContentSecurityPolicy 就可以访问本地资源了
"mainConfig": "./webpack.main.config.js",
"renderer": {
"config": "./webpack.renderer.config.js",
"entryPoints": [
{
"html": "./src/index.html",
"js": "./src/renderer.tsx",
"name": "main_window"
}
]
}
}
]
]
}
配置之后,再使用 上面的两种方法 其中一种就可以解决 手脚架加载本地磁盘文件的问题了。
下面贴上我当时开发的版本信息。
PS D:> node -v
# v14.18.2
PS D:> npm -v
# 6.14.15
{
"@electron-forge/cli": "^6.0.0-beta.61",
"electron": "16.0.5"
}
使用 electron 和 electron-forge 加载 本地磁盘资源 img 的问题的更多相关文章
- spring-boot 加载本地静态资源文件路径配置
1.spring boot默认加载文件的路径是 /META-INF/resources/ /resources/ /static/ /public/ 这些目录下面, 当然我们也可以从spring bo ...
- WP8.1程序开发中,如何加载本地文件资源或安装在程序包中的资源。
Web 要访问来自 Web 的文件,你可以使用标准的绝对 HTTP URI: <img src="http://www.contoso.com/images/logo.png" ...
- #iOS问题记录#动态Html加载本地CSS和JS文件
所谓动态Html,指代码中组合生成的html字符串: 若需要加载本地CSS,图片,JS文件,则, 1,需要文件的全路径: 2,需要"file:///"标志: 例如: //获取文件全 ...
- 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图
[源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...
- iOS --- UIWebView的加载本地数据的三种方式
UIWebView是IOS内置的浏览器,可以浏览网页,打开文档 html/htm pdf docx txt等格式的文件. safari浏览器就是通过UIWebView做的. 服务器将MIM ...
- UIWebView加载本地html文件
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(, , KScreenWidth, KScreenHeight-)]; ...
- 填补Resources和WWW加载本地资源的坑
总的来说Resources和WWW加载本地资源坑比较多,大多与路径有关. 下面代码构成了一个路径的预读模块: 此模块主要解决的坑是:Resources或WWW加载本地的文件夹中的多个文件时,无法获取文 ...
- viewpage listview gridview加载本地大图多图OOM处理办法
很少上博客园写东西了. 最近在写公司项目,由于需要加载本地相册通过viewpager方式来加载, 最后发现直接进入界面就OOM了. 经过几天的整理最终搞定. 现在将加载本地和加载网络图片的缓存工具类贴 ...
- Android WebView加载本地html并实现Java与JS交互
最近做的一个项目中,用到自定义地图,将自定义地图转换成html页面,现在需要做的是如何将本地的html加载到android中,并可以实现交互. 相关讲解: 其实webview加载资源的速度并不慢,但是 ...
随机推荐
- 【LeetCode】934. Shortest Bridge 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS + BFS 相似题目 参考资料 日期 题目地 ...
- 【剑指Offer】包含min函数的栈 解题报告
[剑指Offer]包含min函数的栈 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc45b ...
- 实战!Spring Boot 整合 阿里开源中间件 Canal 实现数据增量同步!
大家好,我是不才陈某~ 数据同步一直是一个令人头疼的问题.在业务量小,场景不多,数据量不大的情况下我们可能会选择在项目中直接写一些定时任务手动处理数据,例如从多个表将数据查出来,再汇总处理,再插入到相 ...
- 「算法笔记」数位 DP
一.关于数位 dp 有时候我们会遇到某类问题,它所统计的对象具有某些性质,答案在限制/贡献上与统计对象的数位之间有着密切的关系,有可能是数位之间联系的形式,也有可能是数位之间相互独立的形式.(如求满足 ...
- Chapter 13 Standardization and The Parametric G-formula
目录 13.1 Standardization as an alternative to IP weighting 13.2 Estimating the mean outcome via model ...
- 使用子查询获取,使用 all 关键字获取比所有“国内短线游”价格高的线路信息,按照线路类型、线路价格升序显示线路编号、线路名和价格
查看本章节 查看作业目录 需求说明: 使用子查询获取"国内短线游"及"国内长线游"的线路信息,按照线路类型.线路价格升序显示线路编号.线路名和价格 使用 all ...
- Java初学者作业——简单程序根据用户输入的会员类型以及购物金额,判断是否能够享受活动优惠
返回本章节 返回作业目录 需求说明: 超市周年庆举行购物满减活动,编写Java程序,根据用户输入的会员类型以及购物金额,判断是否能够享受活动优惠,会员类型的输入不限制大小写.具体获取规则:若为VIP会 ...
- Python原生数据结构增强模块collections
collections简介 python提供了4种基本的数据结构:list.tuple.dict.set.基本数据结构完全可以hold住所有的场景,但是在处理数据结构复杂的场景时,这4种数据结构有时会 ...
- Microsoft HoloLens 开发(1): 搭建 HoloLens 开发环境
1.硬件配置 64位 Windows 10 专业版, 企业版, or 教育版 (注: 家庭版不支持 Hyper-V 或者 HoloLens emulator) 64位 CPU 4核CPU (或者大于4 ...
- Nginx日志配置及日志分析脚本案例
https://blog.csdn.net/bbwangj/article/details/82186162 nginx的log日志分为access log 和 error log 其中access ...