是否可以修改 Location 对象的现有属性,如 "location.href"?

Is it possible to modify existing properties of Location object like "location.href"?

我只需要修补 window.location 对象的某些属性,例如 location.hreflocation.hash。我不确定这是否可能。我已经尝试了几种方法,但没有任何效果。

例如,如果 JavaScript 代码尝试更改 location.href 属性 的值,则此猴子补丁 属性 应该改为调用 history.pushState 函数。逻辑应类似于以下代码。

var customLocation = {
    set href(url){
        history.pushState(null, '', url);
    },
    set hash(url){
        history.pushState(null, '', url);
    }
};

目前,我的类似 Web 浏览器的页面中托管了 100 个相同域的应用程序。我尝试使用我的代码处理所有应用程序的任何导航。 Web 浏览器不应该知道它。我已经修补了 history.pushStatehistory.replaceState 函数。它完美无瑕。

PS。对于任何上下文 (iframe) 中的大多数导航,浏览器始终会为顶部浏览上下文创建新的历史记录条目,允许用户通过后退按钮导航到之前的状态。

经过研究,我很有信心在普通浏览器中无法完成,因为这些属性是由浏览器本身管理的。

唯一可能的解决方案是强制所有子应用程序改用 history.pushStatehistory.replaceState,因为这些原生 API 可以修补并且在我的应用程序容器外运行时应该可以正常工作.因此,我可以完全管理任何子应用程序的历史状态。