我正在尝试开发一个Chrome扩展程序,该程序会将Angular应用程序注入用户的浏览器窗口中,以制作交互式边栏。通过内容脚本向页面添加iframe并将该框架的源设置为扩展目录中的html文件,我基本上能够实现100%的目标。
不幸的是,由于Angular应用程序具有多个路由(允许用户登录并查看许多不同类型的信息),因此我发现它正按预期使用其后退/前进按钮来干扰用户。随着iframe的来源由于哈希值的更改而更改,它会将新条目保存到历史记录中。
我似乎无法为此找到解决方法;有什么聪明的方法可以使Angular不生成历史记录条目,或者实现不使用iframe便无法保存到历史记录的边栏的创建,或者使iframe无法保存到历史记录?
最终,我一直试图编写一个chrome扩展程序,将一个有角度的应用程序嵌入到iframe中,但是发现所有哈希值更改都会干扰Chrome浏览器的历史记录,因为iframe源由于路由更改而不断变化。
虽然我不能肯定地说是否使用ui-router而不是有角度的路由器可以让我规避我的问题(虽然ui-router似乎使用状态,并且不一定需要更改url,但我可能错了),但我已经确定根本原因是iframe来源的改变,并且只有一种方法可以使iframe根本不记录在历史记录中:利用window.location.replace函数而不是直接更改位置。
为了确保我的iframe完全不干扰Chrome的历史记录,我们采取了以下步骤:
$("#myIframe").get(0).contentWindow.location.replace(myUrl);
location.replace(url)
$location.path(newPath).replace()
因此角度使用相同的策略。更好的解决方案是弄清楚$location.replace()
默认情况下如何一直使用,这是我现在尝试实现的。因此,从本质上讲,这全部归结为:location.replace将允许您进行iframe的源更改,而不保存到历史记录。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句