Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 通过文件协议截获将React哈希路由传递给Electron_Reactjs_React Router_Electron_File Uri_Uri Fragment - Fatal编程技术网

Reactjs 通过文件协议截获将React哈希路由传递给Electron

Reactjs 通过文件协议截获将React哈希路由传递给Electron,reactjs,react-router,electron,file-uri,uri-fragment,Reactjs,React Router,Electron,File Uri,Uri Fragment,我的Electron应用程序有一个问题,重新加载本地文件失败 Electron应用程序包装最初使用create React应用程序创建的React web应用程序。React应用程序使用React脚本构建,然后使用Electron Forge打包整个构建文件夹(以及其他),然后使用Squirrel Windows安装程序安装。文件夹结构如下所示: React应用程序文件都存在于这个build文件夹中,包括电子应用程序启动时加载的index.html。为了确保Electron能够正确找到我的文件

我的Electron应用程序有一个问题,重新加载本地文件失败

Electron应用程序包装最初使用create React应用程序创建的React web应用程序。React应用程序使用React脚本构建,然后使用Electron Forge打包整个构建文件夹(以及其他),然后使用Squirrel Windows安装程序安装。文件夹结构如下所示:

React应用程序文件都存在于这个
build
文件夹中,包括电子应用程序启动时加载的
index.html
。为了确保Electron能够正确找到我的文件,我在main
Electron.js
中使用以下代码拦截了文件协议:

protocol.interceptFileProtocol('file',(请求,回调)=>{
const url=request.url.substr(字符串('file://').length);
回调({path:path.join({u dirname,'build',url});
});
这段代码可以很好地在React应用程序中加载和导航,但在某些情况下,我希望允许用户使用刷新按钮刷新页面。我尝试了多种重新加载方法,但每次尝试都会遇到相同的问题:请求失败,状态为
(失败)ERR\u FILE\u NOT\u FOUND

我在Google上搜索了所有有相同问题的人,我找到的最近的一个是,因为路由问题,它引用了一个失败的重新加载。我怀疑这里也可能是这样。应用程序使用React路由器,最初使用的是
浏览器路由器
。此后,我转而使用
HashRouter
,它创建了类似
index.html.#/route/path
的链接

我的应用程序有一个
/dashboard
路由,根路径(
/
index.html
)将自动重定向到该路由。我认为情况就是这样:文件协议将正斜杠解释为文件路径中的一个附加文件夹,因此Electron尝试加载名为
dashboard
的文件,而不是加载
index.html
。它应该将散列(#)之后的所有内容解释为,但它会尝试加载一个显然不存在的文件。正常导航应用程序时,似乎没有发出任何
文件://
协议请求,因此这解释了为什么只有在尝试重新加载时才会出现问题

我确实找到了访问本地文件的React路由的方法。这似乎是相关的,但它没有使用文件协议截取,这对我来说似乎是影响结果的因素

最后提出一个具体的问题:我如何告诉Electron,我正在尝试加载一个最后带有URI片段的文件,而不让它尝试将该片段解释为文件路径的一部分