我有一个平均堆栈网站,使html5mode通过$locationProvider.html5Mode(true).index.html如下所示:
<html>
<head>
<base href="/" />
...
</head>
<body ng-app="f">
<ui-view ng-cloak></ui-view>
</body>
</html>因为有了html5mode,我们可以在浏览器中加载。https://localhost:3000/home将保持不变;如果没有html5mode,该url将成为https://localhost:3000/#/home。
现在,我希望服务器服务(除了网站),也是一个Office外接程序。我需要能够在一个外接程序清单文件中执行<SourceLocation DefaultValue="https://localhost:3000/addin" />。为此,我需要在<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>中添加index.html。
然而,我意识到,在网站的<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>中添加index.html之后,在浏览器中加载https://localhost:3000/home就变成了https://localhost:3000/#/home,这意味着添加office.js将禁用html5mode。
有人知道怎么做吗?有人有办法解决吗?
发布于 2017-07-03 05:32:05
将评论作为回答
据我所知,office.js只需要office应用程序,在这种情况下,不要用office-js来负担您的web应用程序。使用ocLazyLoad (或其他类似的库)只在需要时可选地/动态地加载office.js。
发布于 2017-07-01 06:59:06
查看office.js文件的调试版本:
https://appsforoffice.microsoft.com/lib/1/hosted/office.debug.js
您将看到窗口的历史记录、replaceState和pushState函数设置为null:
window.history.replaceState = null;
window.history.pushState = null;它禁用了对浏览器历史进行操作的能力,而且它似乎有角度地认为历史API是不可用的,因此角返回到哈希标签导航。
您可以删除这两行代码来重新启用html5mode,但是考虑到历史API肯定是禁用的原因,很可能会停止使用启用html5mode的。
发布于 2017-07-03 01:59:46
修改"office.js“本身是错误的方法。首先,商店目前要求您引用正式的Office.js CDN;因此,这种方法已经有了问题。此外,您也不想继续将相同的修补程序应用于经常更改的一组文件,也不希望因为修改过的旧版本而被困在旧版本上。
一个更好的方法是有一个额外的文件来填补空白,但只是作为一个附加的东西。它的侵入性要小得多,而且不易破碎。
有关特别的历史问题:请参见Office.js取消浏览器历史记录函数破坏历史记录的使用中使用多填充来启用历史记录的方法。
https://stackoverflow.com/questions/44604703
复制相似问题