预检清单
- 我已阅读了此项目的 Contributing Guidelines。
- 我同意遵循此项目遵循的 Code of Conduct。
- 我在 issue tracker 中搜索了一个与我想提交的功能请求相匹配的功能请求,但没有成功。
问题描述
目前我们只有检查特定方向是否有历史记录并移动到那里的函数,分别是 canGoBack
、goBack
、canGoForward
和 goForward
。我们还有 goToIndex
和 goToOffset
,但如果没有方法知道列表的长度或当前索引,更不用说哪些条目在导航列表中了,这些似乎就没什么用处。最后,无法以任何方式更改这个“不可见”的导航历史记录列表。它原本是 used to be possible with .history
,但被移除了,现在似乎没有其他方法。
建议的解决方案
添加回来 .history
或者一些替代方案(也许可以使用 getter 或 setter,尽管 Electron 似乎最近转向使用读/写属性,所以这也是我的首选),以便查看列表,这样实际上就有 goToIndex
和 goToOffset
的用途,而不仅仅是猜测。其次,添加一种方法来知道导航当前在列表中的位置,再次,canGoForward
等可以让你有猜测,但最好能知道。最后,我希望有一种方法可以修改这个列表,因为我需要为其中一个项目能够在重新启动应用程序后恢复 webview 的历史记录(或者在关闭 webview 后重新创建它)。如果技术上更容易的话,我不介意这需要在创建 webview 时发生,但是如果你问我,webcontents 上的属性或一组函数更具可重用性和适合性。
考虑过的替代方案
作为最后的手段,不使用 goBack
和 goForward
或者 Electron 提供的任何导航功能,从头开始构建一个自定义的历史记录管理器,这是繁琐的,但除此之外是必需的,因为当前的实现根本不清楚历史记录中有什么,也无法以任何方式修改。
其他信息
- 无响应*
9条答案
按热度按时间kcugc4gi1#
浏览器扩展有一个history API,但我不确定它是否可以在Electron中使用。
zujrkrfu2#
是的,但它不允许完全控制,因为这只是一个搜索和一些索引功能,而我希望/想要有一个可以修改每个webview/webcontents的url数组。
nx7onnlm3#
是的,但它不允许完全控制,因为这只是一个搜索和一些索引功能,而我希望/想要有一个可以修改每个webview/webcontents的url数组。
history.search
方法可以将文本参数设置为空字符串以获取所有历史记录。但我没有测试过这个,我查看了electron的源代码并发现webContents的历史是通过js实现的,而不是chromium自己的api,这可能不适用于浏览器扩展。目前我计划监听did-navigate
和did-navigate-in-page
事件,并自己保存url来实现一个历史记录功能。eiee3dmh4#
这个问题在于,你无法将之前的浏览器历史记录恢复到新的网页内容中,并期望能够使用
goBack
和goForward
。因为新网页内容的历史记录是空的,如果不进行导航,就无法更改历史记录,而且现有的历史记录也不容易从渲染进程中读取。这需要预加载,并且导航只有在它们在同一个域中时才会可见,所以对于读取/写入自定义历史记录来说,实际上没有什么用处。hiz5n14c5#
这仅解决了阅读部分的问题,似乎没有办法将列表写入导航历史。这意味着任何应用程序仍然需要基于列表构建自定义历史记录实现,而不是能够使用常规的Chromium/Electron后退和前进操作。
k3fezbri6#
MarshallOfSound,这个能重新打开吗?这还没完成。
vulvrdjw7#
@MarshallOfSound 这个不允许回写历史,只允许读取。这个能否重新打开,或者我应该开一个新的问题?
xoshrz7s8#
我也希望看到一种写入历史记录的方法。目前我已经编写了大量自定义的历史逻辑,允许我的应用程序的用户在webview和非webview页面之间来回切换(因为webview的历史记录没有与父级的历史记录合并)。
最后一个剩余的问题是,返回/前进会导致webview的完全重新加载,因为它必须加载另一个url。如果有一种修改其历史记录的方法,我只需在其中放入适当的条目,并使用goBack和goForward函数来实现平滑导航。
fjnneemd9#
只想添加另一个用例:在electron中实现自定义选项卡解决方案时,您几乎总是需要某种方式来“重新打开上次关闭的选项卡”。这很容易实现,但目前还没有方法可以恢复WebContents的历史记录,因此用户无法导航返回,导致用户体验不佳。