Eu tenho essa estrutura no aplicativo:
Eu escrevo na cabeça meu index.html:
<link rel="stylesheet" href="css/app.css"/>
execute o elétron e obtenha o erro:
Falha ao carregar o recurso: net :: ERR_FILE_NOT_FOUND file: /// D: /css/app.css
Por favor, todos, me digam, como devo definir o caminho para o arquivo?
Assunto relacionado: # 1747.
Tente isso como uma maneira alternativa de contornar esse problema de caminho:
<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 Obrigado pelo snippet.
Recebo um erro porque o uso <base href = "/">, sem este erro não ocorre.
Exemplo de trabalho https://github.com/RinatMullayanov/angular-boilerplate branch elétron .
Têm o mesmo problema também. Electron tenta carregar recursos de C: /, caminhos relativos não funcionam.
Definir o caminho completo não é uma opção, os arquivos não serão carregados se colocarmos o aplicativo em outro caminho.
Eu tenho o mesmo problema para obter alguma fonte
Eu adicionei isso ao meu CSS
<strong i="7">@import</strong> url(https://fonts.googleapis.com/css?family=Open+Sans:400,700);
Eu até tentei adicionar isto ao meu html:
<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans" />
Eu também tentei:
<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" />
mas recebo este erro:
Failed to load resource: net::ERR_CONNECTION_REFUSED
Se isso ocorrer ao ter <base href="/">
no index.html, basta substituí-lo por <base href="./">
.
@Myrga, você salva uma vida. Estou procurando uma resposta há 5 dias, nenhum doc sobre isso, até que me deparei com este post antigo. Muito obrigado
ps: se você veio aqui e está usando o create-react-app, tente colocar "homepage": "./",
em seu package.json. (Embora aparentemente isso não seja compatível no momento, você pode ter outros problemas com fontes e outros, o que pode exigir a movimentação desses recursos para sua pasta / public)
muito obrigado
@BesatZardosht Ocorreu um erro de digitação em seu URL:
<link rel="stylesheet" type="text/css" href="https//fonts.googleapis.com/css?family=Open+Sans" />
deveria estar:
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Open+Sans" />
(observe o :
)
Caso você esteja aqui com o mesmo problema usando Webpack 2.x
, React
e / ou Redux
, há uma chance de que isso resolva o seu problema:
Pesquise no diretório do seu projeto por "publicPath" e altere seu valor de
/
para./
com todos os diferentes padrões disponíveis, esta configuração pode ser encontrada em locais diferentes. No meu caso, usandoredux-cli
que usaredux-starter-kit
, estava emproject.config.js
:
publicPath: './',
Além disso, se você estiver construindo para Electron
pode ser necessário adicionar / modificar a propriedade Webpack target
.
Fique feliz!! 😄
Tive o mesmo problema, a solução de Myrga funcionou. eu penso
Decidi refazer meu aplicativo no React. Depois de adicionar o carregador de arquivos ao meu projeto, comecei a ter esse problema novamente. alterar a propriedade publicPath em webpack.config.js para um caminho relativo (para mim ./app/ em vez de / app /) corrigiu o problema.
PS parece que o servidor de desenvolvimento odeia isso. Se você fizer essa alteração e quiser executar um servidor de desenvolvimento webpack, essa alteração irá confundi-lo. Você precisará alternar entre trabalhar diretamente no electron e trabalhar no servidor de desenvolvimento (a razão de eu fazer isso é para fazer o trabalho de css, acho o servidor de desenvolvimento mais rápido e estável)
Você pode salvar o arquivo html como "salvar como página da web" e tentar abri-lo no Chrome.
Isso funcionou para mim.
como resolver " Falha ao carregar o recurso: net :: ERR_FILE_NOT_FOUND "
sempre que adiciono uma imagem usando "CSS", esse erro é gerado
não só a imagem, mas os arquivos como arquivo de fonte, dá o mesmo erro.
@Tahawahid @RinatMullayanov
É porque todos os seus arquivos estão sendo servidos a partir do sistema de arquivos local, em vez do caminho relativo do aplicativo.
A solução é interceptar o protocolo do arquivo. Faça as seguintes alterações no arquivo 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 */
})
uma
@Tahawahid @RinatMullayanov
É porque todos os seus arquivos estão sendo servidos a partir do sistema de arquivos local, em vez do caminho relativo do aplicativo.
A solução é interceptar o protocolo do arquivo. Faça as seguintes alterações no arquivo main.jsMain.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 */ })
?
Problema de caminho. Navegador pesquise seu arquivo em D: /css/app.css. Isso porque em algum lugar do seu código, mencionou um caminho errado. Se você receber um caminho como / css / ... isso pesquisará em D: /
Isso também funcionou. Obrigado pelo Sr. @itsaakashpatel pelo insight.
// ...
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)
)
// ...
Basta substituir htmlRootDir
e / ou indexFile
com suas expectativas.
_Testado em Linux_
@Myrga Obrigado por salvar meu dia. Adorei sua resposta :)
@Myrga bem, você provavelmente "homepage": "./"
em package.json
vez de codificar essas coisas.
@Myrga bem, você provavelmente
"homepage": "./"
empackage.json
vez de codificar essas coisas.
Por favor, @defusioner , existe algum documento sobre isso?
@leodutra humm, estou usando o https://create-react-app.dev/docs/deployment#building -for-relative-path
@defusioner Hum, isso explica muita coisa.
Parece que isso não está no nível do elétron , é mais uma página inicial para aplicativos de reação , onde substituirá a raiz padrão para qualquer link relativo ou raiz.
No meu caso, usando um dist Vue.js ou um elétron bruto, isso provavelmente não funcionará.
Acho que essa abordagem de pacote deve ser levada em consideração ... como alguns electronBasePath
em package.json
Acho que win.loadFile('index.html')
é uma merda! Depois de compilá-lo para o arquivo EXE usando electron-builder
. Sempre mostrará DevTools failed to load SourceMap: Could not load content for file:///C:/User..../resources/app.asar/bootstrap.min.css.map
.
Mas o win.loadURL()
funciona bem.
Passei 8 horas para descobrir que esse é um bug que não consigo resolver.
Então percebi que esse bug não é importante, porque o arquivo do mapa é realmente importado.
Para mim, o verdadeiro bug foi causado por alert()
: https://stackoverflow.com/questions/56805920/cant-edit-input-text-field-after-window-alert
Comentários muito úteis
Se isso ocorrer ao ter
<base href="/">
no index.html, basta substituí-lo por<base href="./">
.