我在应用程序中有这样一个结构:
我在头写我的 index.html:
<link rel="stylesheet" href="css/app.css"/>
运行电子并得到错误:
无法加载资源:net::ERR_FILE_NOT_FOUND file:///D:/css/app.css
请大家告诉我,我应该如何设置文件的路径?
相关问题:#1747。
尝试将此作为解决此路径问题的替代方法:
<html>
<head>
<title></title>
</head>
<body>
<script>
var link = document.createElement('link')
link.setAttribute('rel', 'stylesheet')
link.setAttribute('href', require('path').join(__dirname, 'css', 'app.css'))
document.head.appendChild(link)
</script>
</body>
</html>
@shama感谢您的片段。
我得到一个错误,因为使用 <base href="/">,没有这个错误就不会发生。
示例工作https://github.com/RinatMullayanov/angular-boilerplate分支电子。
也有同样的问题。 Electron 尝试从 C:/ 加载资源,相对路径不起作用。
设置完整路径不是一个选项,如果我们将应用程序放在另一个路径上,文件将不会加载。
我在获取一些字体时遇到了同样的问题
我已将此添加到我的 CSS
<strong i="7">@import</strong> url(https://fonts.googleapis.com/css?family=Open+Sans:400,700);
我什至尝试将其添加到我的 html 中:
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans" />
我也试过:
<link rel="stylesheet" type="text/css" href="http//fonts.googleapis.com/css?family=Open+Sans" />
<link rel="stylesheet" type="text/css" href="https//fonts.googleapis.com/css?family=Open+Sans" />
但我收到此错误:
Failed to load resource: net::ERR_CONNECTION_REFUSED
如果在 index.html 中有<base href="/">
时发生这种情况,只需将其替换为<base href="./">
。
@Myrga你是
ps:如果您来到这里并使用 create-react-app,请尝试将"homepage": "./",
放入您的 package.json 中。 (尽管目前显然不支持此功能,因此您可能会遇到字体等其他问题,这可能需要将这些资产移动到您的 /public 文件夹)
太感谢了
@BesatZardosht你的 URL 有错别字:
<link rel="stylesheet" type="text/css" href="https//fonts.googleapis.com/css?family=Open+Sans" />
应该:
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Open+Sans" />
(注意:
)
如果您在这里使用Webpack 2.x
、 React
和/或Redux
遇到同样的问题,这有可能解决您的问题:
在您的项目目录中搜索“publicPath”并将其值从
/
更改./
对于所有不同的可用样板,可以在不同位置找到此设置,在我使用redux-cli
,它使用redux-starter-kit
,它在project.config.js
:
publicPath: './',
此外,如果您为Electron
构建,您可能需要添加/修改 Webpack target
属性。
保持愉快!! 😄
有同样的问题,Myrga 的解决方案奏效了。 我认为
决定在 React 中重新制作我的应用程序。 一旦我将文件加载器添加到我的项目中,我又开始遇到这个问题。 将 webpack.config.js 中的 publicPath 属性更改为相对路径(对我来说是 ./app/ 而不是 /app/)修复了这个问题。
PS 似乎开发服务器讨厌这个。 如果您进行此更改并希望运行 webpack 开发服务器,则此更改会将其混淆。 当你从直接在电子工作和在开发服务器上工作时,你需要来回切换(我这样做的原因是做 css 工作,我发现开发服务器更快更稳定)
您可以将 html 文件另存为“另存为网页”,然后尝试在 chrome 中打开。
这对我有用。
如何解决“加载资源失败:net::ERR_FILE_NOT_FOUND ”
每当我使用“CSS”添加图像时,它都会引发此错误。 各位大侠有什么解决办法???
不仅是图像,还有像字体文件这样的文件,它给出了同样的错误。
@Tahawahid @RinatMullayanov
这是因为您的所有文件都是从本地文件系统而不是相对应用程序路径提供的。
解决办法是拦截文件协议。 在 main.js 文件中做以下更改
mainWindow = new BrowserWindow({width: 1100, height: 700, icon: __dirname + '/icon.ico'})
mainWindow.loadURL(url.format({
pathname:'index.html',
protocol: 'file',
slashes: true
}))
app.on('ready', () => {
protocol.interceptFileProtocol('file', (request, callback) => {
const url = request.url.substr(7) /* all urls start with 'file://' */
callback({ path: path.normalize(
${__dirname}/${url} )})
}, (err) => {
if (err) console.error('Failed to register protocol')
})
createWindow() /* callback function */
})
一种
@Tahawahid @RinatMullayanov
这是因为您的所有文件都是从本地文件系统而不是相对应用程序路径提供的。
解决办法是拦截文件协议。 在 main.js 文件中做以下更改主程序
mainWindow = new BrowserWindow({width: 1100, height: 700, icon: __dirname + '/icon.ico'}) mainWindow.loadURL(url.format({ pathname:'index.html', protocol: 'file', slashes: true }))
app.on('ready', () => { protocol.interceptFileProtocol('file', (request, callback) => { const url = request.url.substr(7) /* all urls start with 'file://' */ callback({ path: path.normalize(
${__dirname}/${url})}) }, (err) => { if (err) console.error('Failed to register protocol') }) createWindow() /* callback function */ })
?
路径问题。 浏览器在 D:/css/app.css 中搜索您的文件。 这是因为在您的代码中的某个地方提到了错误的路径。 如果你得到一个像 /css/... 这样的路径,这将在 D:/ 中搜索
这也成功了。 感谢@itsaakashpatel先生的洞察力。
// ...
const { protocol } = require('electron')
// ...
// run the next block right before <BrowserWindow>.loadFile()
const htmlRootDir = 'dist/'
const indexFile = 'index.html'
protocol.interceptFileProtocol(
'file',
(request, callback) => {
const url = request.url.substr(7) // strip "file://" out of all urls
if (request.url.endsWith(indexFile)) {
callback({ path: url })
} else {
callback({ path: path.normalize(`${__dirname}/${htmlRootDir}/${url}`) })
}
},
error => console.error(error)
)
// ...
只需根据您的期望替换htmlRootDir
和/或indexFile
。
_在 Linux 上测试过_
@Myrga感谢您挽救了我的一天。 喜欢你的回答:)
@Myrga好吧,您可能会在package.json
设置"homepage": "./"
package.json
而不是硬编码这些东西。
@Myrga好吧,您可能会在
package.json
设置"homepage": "./"
package.json
而不是硬编码这些东西。
请@defusioner ,有没有关于这个的文档?
@leodutra嗯,我正在使用 react-cra,他们能够生成这样的配置: https : //create-react-app.dev/docs/deployment#building -for-relative-paths
@defusioner嗯,这解释了很多。
像这样看起来是不是对电子级,这更是一个为反应的应用程序,在那里,这将替代默认的根任何亲属或根的链接网页。
在我的情况下,使用 Vue.js dist 或原始电子,这可能不起作用。
我认为应该考虑这种包方法......就像 package.json 上的一些electronBasePath
我认为win.loadFile('index.html')
就像一个狗屎! 在我们使用electron-builder
其编译为 EXE 文件后。 它总是显示DevTools failed to load SourceMap: Could not load content for file:///C:/User..../resources/app.asar/bootstrap.min.css.map
。
但是win.loadURL()
运行良好。
我花了8个小时才发现这是一个我无法解决的错误。
然后我意识到这个错误并不重要,因为确实导入了地图文件。
对我来说,真正的错误是由alert()
: https :
最有用的评论
如果在 index.html 中有
<base href="/">
时发生这种情况,只需将其替换为<base href="./">
。