Reactjs 通过文件协议截获将React哈希路由传递给Electron
我的Electron应用程序有一个问题,重新加载本地文件失败 Electron应用程序包装最初使用create React应用程序创建的React web应用程序。React应用程序使用React脚本构建,然后使用Electron Forge打包整个构建文件夹(以及其他),然后使用Squirrel Windows安装程序安装。文件夹结构如下所示: React应用程序文件都存在于这个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能够正确找到我的文件
build
文件夹中,包括电子应用程序启动时加载的index.html
。为了确保Electron能够正确找到我的文件,我在mainElectron.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片段的文件,而不让它尝试将该片段解释为文件路径的一部分