是否可以修改 Location 对象的现有属性,如 "location.href"?
Is it possible to modify existing properties of Location object like "location.href"?
我只需要修补 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);
}
};
目前,我的类似 Web 浏览器的页面中托管了 100 个相同域的应用程序。我尝试使用我的代码处理所有应用程序的任何导航。 Web 浏览器不应该知道它。我已经修补了 history.pushState
和 history.replaceState
函数。它完美无瑕。
PS。对于任何上下文 (iframe) 中的大多数导航,浏览器始终会为顶部浏览上下文创建新的历史记录条目,允许用户通过后退按钮导航到之前的状态。
经过研究,我很有信心在普通浏览器中无法完成,因为这些属性是由浏览器本身管理的。
唯一可能的解决方案是强制所有子应用程序改用 history.pushState
和 history.replaceState
,因为这些原生 API 可以修补并且在我的应用程序容器外运行时应该可以正常工作.因此,我可以完全管理任何子应用程序的历史状态。
我只需要修补 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);
}
};
目前,我的类似 Web 浏览器的页面中托管了 100 个相同域的应用程序。我尝试使用我的代码处理所有应用程序的任何导航。 Web 浏览器不应该知道它。我已经修补了 history.pushState
和 history.replaceState
函数。它完美无瑕。
PS。对于任何上下文 (iframe) 中的大多数导航,浏览器始终会为顶部浏览上下文创建新的历史记录条目,允许用户通过后退按钮导航到之前的状态。
经过研究,我很有信心在普通浏览器中无法完成,因为这些属性是由浏览器本身管理的。
唯一可能的解决方案是强制所有子应用程序改用 history.pushState
和 history.replaceState
,因为这些原生 API 可以修补并且在我的应用程序容器外运行时应该可以正常工作.因此,我可以完全管理任何子应用程序的历史状态。