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

时间:2016-09-09 18:30:43

标签: javascript google-chrome internet-explorer-11

我只需修补window.locationlocation.hreflocation.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.pushStatehistory.replaceState个功能。它完美无瑕。 enter image description here

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

1 个答案:

答案 0 :(得分:0)

经过研究,我完全相信它不能在普通浏览器中完成,因为这些属性是由浏览器本身管理的。

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