在我的Electron应用程序中,我有一个webview。如果我点击链接(例如在Google上),然后向后移动,则链接不会变为紫色,就像在普通浏览器中一样。
我可以在Electron中激活此行为吗?或者以编程方式进行,如果我自己存储浏览历史记录?
我想这是history support in Electron还不是最好的?
使用电子的Muon分叉可能有可能吗?
答案 0 :(得分:2)
正如您在this file第16行的评论中所看到的那样,电子人/女孩已经创建了自己的导航解决方案。这似乎无法正确处理a:visited
。
相反,我们可以轻松创建自己的解决方案。将以下函数添加到所有渲染器脚本中,并确保将simuHistory();
放在每个页面的开头:
function simuHistory() {
var localstorageSimuHistory = localStorage.getItem('simuHistory');
var simuHistory = localstorageSimuHistory ? JSON.parse(localstorageSimuHistory) : [];
var found = false;
var windowHref = window.location.href;
for(let i=0;i<simuHistory.length;i++) {
if(simuHistory[i] == windowHref) {
found = true;
break;
}
}
if(found === false) {
simuHistory[simuHistory.length] = windowHref;
localStorage.setItem('simuHistory', JSON.stringify(simuHistory));
}
var elements = document.getElementsByTagName('a');
for(let i=0;i<elements.length;i++) {
for(let h=0;h<simuHistory.length;h++) {
if(elements[i].href == simuHistory[h]) {
elements[i].className += ' visited';
}
}
}
}
并将以下CSS添加到样式表中:
.visited {
color: purple;
}
或者,如果您不想包含CSS(或希望它包含所有内容),您可以替换此行:
elements[i].className += ' visited';
......用这一行:
elements[i].style.color = 'purple';
TL; DR就是这样,除非您的应用中有超过25,000个相当长的唯一网址,否则您无需担心可扩展性。
访问过的网址存储在localStorage
中。这是有限的,因此我们可以存储的URL数量有限。我相信Electron这个限制在5MB左右。我使用以下代码通过向simuHistory
数组添加25,000个其他URL来测试性能:
for(var i=0;i<25000;i++) {
simuHistory[simuHistory.length] = 'https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers' + Math.floor((Math.random() * 1000000) + 1);
}
选择网址是因为它相当长。最后的随机数实际上根本没有影响;我只是加入它来增加一些额外的长度。然后我在我糟糕的笔记本电脑(没有SSD)上运行simuHistory()
:
25,000 URLs == ~210ms
1,000 URLs == ~13ms
在我看来,几乎所有Electron应用程序的速度都很快,但这取决于你的用例,你可能会得到多少个URL。