首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加office.js会在url中添加#,然后将其删除

添加office.js会在url中添加#,然后将其删除
EN

Stack Overflow用户
提问于 2017-07-01 12:46:52
回答 1查看 440关注 0票数 3

我有一个mean-stack网站。最初,views/index.html (具有<ui-view></ui-view>)是所有页面的入口点。它使用angular-ui-routerhtml5mode。因此,浏览器中的https://localhost:3000/XXXX将保持不变(而不是添加#),并根据路由器显示相应的内容。

然后,我希望服务器还提供Office外接程序。我需要包含office.js和另一个路由器的views/addin.html,这样站点就可以提供一组url https://localhost:3000/addin/XXXX,并且我不介意它是否是html5mode (url可以在某个地方包含# )。

因此,这是routes/index.js的对应

代码语言:javascript
复制
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

代码语言:javascript
复制
<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/newhttps://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有#),但无论哪种方式的行为都是奇怪的或不令人满意的。有没有人知道如何修复它或有变通办法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-01 15:07:50

查看office.js文件的调试版本:

https://appsforoffice.microsoft.com/lib/1/hosted/office.debug.js

您将看到窗口的历史记录replaceState和pushState函数被设置为null:

代码语言:javascript
复制
window.history.replaceState = null;
window.history.pushState = null;

这禁用了操纵浏览器历史记录的能力,并且它似乎有Angular认为历史API不可用,因此Angular回落到hashtag导航。

office.js的精简版本中,您可以通过查找以下内容找到这两行:

代码语言:javascript
复制
window.history.replaceState=e;window.history.pushState=e;

您可以删除这两行代码来重新启用html5mode,但我不确定office.js插件是否会继续正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44857415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档