gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:51:07 25 4
gpt4 key购买 nike

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

然后,我希望服务器也提供 Office 加载项。我需要 views/addin.html包含 office.js和另一个路由器,这样站点就可以提供一组 url https://localhost:3000/addin/XXXX , 我不介意它是 html5mode或不(网址可以在某处包含 #)。

所以这是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/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"/> 加载 list 文件,我们还将在任务 Pane 中看到 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 有 # ),但任何一种方式的行为都是奇怪的或不令人满意的。有谁知道如何修复它或有解决方法?

最佳答案

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

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

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

window.history.replaceState = null;
window.history.pushState = null;

这禁用了操纵浏览器历史记录的能力,并且 Angular 似乎认为历史记录 API 不可用,因此 Angular 退回到主题标签导航。

office.js 缩小版中,您可以通过查找找到这两行:

window.history.replaceState=e;window.history.pushState=e;

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

关于javascript - 添加 office.js 在 url 中添加#,然后将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44857415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com