electron [功能请求]:查看和修改网页内容的导航历史记录(以及通过扩展实现的webviews)

6pp0gazn  于 4个月前  发布在  Electron
关注(0)|答案(9)|浏览(49)

预检清单

问题描述

目前我们只有检查特定方向是否有历史记录并移动到那里的函数,分别是 canGoBackgoBackcanGoForwardgoForward。我们还有 goToIndexgoToOffset,但如果没有方法知道列表的长度或当前索引,更不用说哪些条目在导航列表中了,这些似乎就没什么用处。最后,无法以任何方式更改这个“不可见”的导航历史记录列表。它原本是 used to be possible with .history,但被移除了,现在似乎没有其他方法。

建议的解决方案

添加回来 .history 或者一些替代方案(也许可以使用 getter 或 setter,尽管 Electron 似乎最近转向使用读/写属性,所以这也是我的首选),以便查看列表,这样实际上就有 goToIndexgoToOffset 的用途,而不仅仅是猜测。其次,添加一种方法来知道导航当前在列表中的位置,再次,canGoForward 等可以让你有猜测,但最好能知道。最后,我希望有一种方法可以修改这个列表,因为我需要为其中一个项目能够在重新启动应用程序后恢复 webview 的历史记录(或者在关闭 webview 后重新创建它)。如果技术上更容易的话,我不介意这需要在创建 webview 时发生,但是如果你问我,webcontents 上的属性或一组函数更具可重用性和适合性。

考虑过的替代方案

作为最后的手段,不使用 goBackgoForward 或者 Electron 提供的任何导航功能,从头开始构建一个自定义的历史记录管理器,这是繁琐的,但除此之外是必需的,因为当前的实现根本不清楚历史记录中有什么,也无法以任何方式修改。

其他信息

  • 无响应*
kcugc4gi

kcugc4gi1#

浏览器扩展有一个history API,但我不确定它是否可以在Electron中使用。

zujrkrfu

zujrkrfu2#

是的,但它不允许完全控制,因为这只是一个搜索和一些索引功能,而我希望/想要有一个可以修改每个webview/webcontents的url数组。

nx7onnlm

nx7onnlm3#

是的,但它不允许完全控制,因为这只是一个搜索和一些索引功能,而我希望/想要有一个可以修改每个webview/webcontents的url数组。
history.search方法可以将文本参数设置为空字符串以获取所有历史记录。但我没有测试过这个,我查看了electron的源代码并发现webContents的历史是通过js实现的,而不是chromium自己的api,这可能不适用于浏览器扩展。目前我计划监听did-navigatedid-navigate-in-page事件,并自己保存url来实现一个历史记录功能。

eiee3dmh

eiee3dmh4#

这个问题在于,你无法将之前的浏览器历史记录恢复到新的网页内容中,并期望能够使用 goBackgoForward。因为新网页内容的历史记录是空的,如果不进行导航,就无法更改历史记录,而且现有的历史记录也不容易从渲染进程中读取。这需要预加载,并且导航只有在它们在同一个域中时才会可见,所以对于读取/写入自定义历史记录来说,实际上没有什么用处。

hiz5n14c

hiz5n14c5#

这仅解决了阅读部分的问题,似乎没有办法将列表写入导航历史。这意味着任何应用程序仍然需要基于列表构建自定义历史记录实现,而不是能够使用常规的Chromium/Electron后退和前进操作。

k3fezbri

k3fezbri6#

MarshallOfSound,这个能重新打开吗?这还没完成。

vulvrdjw

vulvrdjw7#

@MarshallOfSound 这个不允许回写历史,只允许读取。这个能否重新打开,或者我应该开一个新的问题?

xoshrz7s

xoshrz7s8#

我也希望看到一种写入历史记录的方法。目前我已经编写了大量自定义的历史逻辑,允许我的应用程序的用户在webview和非webview页面之间来回切换(因为webview的历史记录没有与父级的历史记录合并)。

最后一个剩余的问题是,返回/前进会导致webview的完全重新加载,因为它必须加载另一个url。如果有一种修改其历史记录的方法,我只需在其中放入适当的条目,并使用goBack和goForward函数来实现平滑导航。

fjnneemd

fjnneemd9#

只想添加另一个用例:在electron中实现自定义选项卡解决方案时,您几乎总是需要某种方式来“重新打开上次关闭的选项卡”。这很容易实现,但目前还没有方法可以恢复WebContents的历史记录,因此用户无法导航返回,导致用户体验不佳。

相关问题