У меня есть веб-сайт со средним стеком. Изначально views/index.html
(с <ui-view></ui-view>
) является точкой входа для всех страниц. Он использует angular-ui-router
и html5mode
. Таким образом, https://localhost:3000/XXXX
в браузере останется прежним (вместо добавления #
) и будет отображать соответствующий контент в зависимости от маршрутизатора.
Затем я хочу, чтобы сервер также обслуживал надстройку Office. Мне понадобится views/addin.html
, который содержит office.js
, и еще один маршрутизатор, чтобы сайт обслуживал набор URL-адресов https://localhost:3000/addin/XXXX
, и мне все равно, будет ли это html5mode
или нет (URL-адрес может где-то содержать #
).
Итак, вот соответствие routes/index.js
:
router.get('/addin/*', function (req, res) {
console.log("router.get /addin/*");
res.sendfile('./views/addin.html')
});
router.get('*', function(req, res) {
console.log("router.get *");
res.sendfile('./views/index.html');
});
А вот и views/addin.html
:
<html>
<head>
<title>F-addin</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.3.2/angular-ui-router.js"></script>
<!--<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>-->
<base href="/" />
</head>
<body ng-app="addinF">
addin content
<ui-view ng-cloak></ui-view>
</body>
<script>
var addinApp = angular.module('addinF', ['ui.router'])
addinApp.config(['$stateProvider', '$locationProvider', function ($stateProvider, $locationProvider) {
$stateProvider
.state('addinNew', {
url: '/addin/new',
template: "new page"
})
.state('addinHome', {
url: '/addin/home',
template: "home page"
})
$locationProvider.html5Mode(true);
}]);
</script>
</html>
Когда office.js
прокомментирован, как указано выше, https://localhost:3000/addin/new
и https://localhost:3000/addin/home
в браузере работают хорошо. Однако, когда office.js
раскомментирован, наблюдается странное поведение: ввод https://localhost:3000/addin/new
в браузере изменится на https://localhost:3000/#/addin/new
, а затем снова изменится на https://localhost:3000/addin/new
. И мы увидим, как addin content new page
появится один раз и исчезнет.
С раскомментированным office.js
, если мы загрузим файл манифеста с <SourceLocation DefaultValue="https://localhost:3000/addin/new"/>
, мы также увидим, что в области задач addin content new page
появляется один раз и исчезает, а затем Add-in Error Something went wrong and we couldn't start this add-in. Please try again later or contact your system administrator.
Без html5mode
здесь .../addin/new
или .../addin/home
в браузере будет отображаться только addin content
; надстройку можно загрузить, только с addin content
тоже.
Моя цель — заставить работать надстройку, указывающую на .../addin/new
или .../addin/home
. office.js
должен быть где-то загружен. Я не возражаю, если это будет html5mode
(т. е. URL-адрес имеет #
), но поведение в любом случае будет странным или неудовлетворительным. Кто-нибудь знает, как это исправить или есть обходной путь?