Aurelia 路由器在项目中托管时失败

Aurelia router fails when hosted in Project

我正在创建 Microsoft Office Project Professional 2016 加载项(不是 VSTO,而是新的 Office add-ins model)。我制作了一个基本的网络应用程序,使用 ASP.NET 核心与 Aurelia、Webpack 和 TypeScript(尚未引用任何 office-js api),并部署了加载项清单。这行得通,我可以在 Project 的侧窗格中加载加载项。

问题出在我将路由器添加到我的应用程序时。当托管在 Project 中时,应用程序静默失败,并且不会在页面中呈现。通过附加 Windows 10 F12 开发人员工具并查看控制台,我可以看到 Aurelia 应用已启动,并且 configureRouter() 在 app.ts 中被调用。在那之后似乎有些事情失败了,但我找不到在哪里放置断点来获取更多信息。如果我尝试连接到 component lifecycle,则会调用 bind 但不会调用 attached

Web 应用程序在 Chrome、Firefox、Edge 和 IE 11 中正确加载,无论是否使用路由器。

这是因为 history.pushStatehistory.replaceState 在 Office AddOn 上下文中被禁用,因此路由器在尝试调用这些功能时会失败(它确实支持历史记录 forward/backward导航)。

您可以通过打开 vendor.bundle 并搜索 BrowserHistory.prototype.navigate and/or BrowserHistory.prototype.activate 并在其开头放置断点来在调试器中找到它。它应该在其中之一失败。

您可以尝试同时设置 config.options.pushState = falseconfig.options.hashChange = false 以完全禁用状态管理 (afaik),但我自己从未实际尝试过。

您可能需要推出适用于该项目的 stripped-down BrowserHistory 自己的实现,并简单地用它替换现有的 HistoryBrowserHistory 键在您的根容器中实施。