我只需修补window.location
或location.href
等location.hash
对象的某些属性。我不确定它是否可能。我已经尝试了几种方法,但没有任何作用。
例如,如果JavaScript代码尝试更改location.href
属性的值,则此猴子修补属性应该调用history.pushState
函数。逻辑应该类似于以下代码。
var customLocation = {
set href(url){
history.pushState(null, '', url);
},
set hash(url){
history.pushState(null, '', url);
}
};
目前,有100个同域应用程序托管在我类似Web浏览器的页面中。我尝试用我的代码处理所有应用程序的任何导航。 Web浏览器不应该知道它。我已经修补了history.pushState
和history.replaceState
个功能。它完美无瑕。
PS。对于任何上下文(iframe)中的大多数导航,浏览器始终创建新的历史记录条目到顶部浏览上下文,允许用户通过后退按钮导航到以前的状态。
答案 0 :(得分:0)
经过研究,我完全相信它不能在普通浏览器中完成,因为这些属性是由浏览器本身管理的。
唯一可行的解决方案是强制所有子应用程序使用history.pushState
和history.replaceState
,因为这些本机API可以修补,并且当它在我的应用程序容器外运行时应该可以正常工作。因此,我可以完全管理任何子应用程序的历史状态。