2

我有一个由mean-stack提供的应用程序,它包含一个网站和一个Excel加载项。 html5被启用,它具有DisplayDialogAsync和html5-history-api的冲突

<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script> 
<script src="https://cdn.rawgit.com/devote/HTML5-History-API/master/history.js"></script> 

在Excel插件,我有通过Dialog API打开的网站页面的按钮:

$scope.openDialog = function() { 
    Office.context.ui.displayDialogAsync("https://localhost:3000/preview/tmp/6wr-4PqdBrYQwjp3AAAD", {}, function() {}) 
} 

当我点击这个按钮在Excel中在Chrome中,它会打开一个对话框,其中包含以下URL(请注意,系统地添加了#和几个%2F),但它并不妨碍正确显示页面。

https://localhost:3000/preview/tmp/6wr-4PqdBrYQwjp3AAAD?_host_Info=excel|web|16.00|en-us|b6f37f78-e519-7d03-0069-b9c4317a362c|isDialog#%2Fpreview%2Ftmp%2F6wr-4PqdBrYQwjp3AAAD%3F_host_Info=excel%7Cweb%7C16.00%7Cen-us%7Cb6f37f78-e519-7d03-0069-b9c4317a362c%7CisDialog 

然而,当我点击这个按钮在Excel在线在Firefox的URL变化快到以下网址,果然显示该网站的主页:

https://localhost:3000/home#%2Fpreview%2Ftmp%2F6wr-4PqdBrYQwjp3AAAD%3F_host_Info=excel%7Cweb%7C16.00%7Cen-gb%7C919fff78-e51f-dc20-0c3c-871b7d0ec25d%7CisDialog 

所以我问题是:

1)为什么Office.context.ui.displayDialogAsync系统地添加#%2F到我的网站的网址?是否有可能防止这种情况发生?

2)是否可以制作一个Firefox接受的url(不管#%2F)?

编辑1:看来,如果我不使用html5-history-api,它会起作用。所以不知道如何为displayDialogAsync禁用html5-history-api? (之所以必须在office.js之后使用html5-history-api是因为here。)

+0

你能分享一个链接,让人们可以测试你描述的行为吗? –

+0

@VivekAthalye对不起,目前我没有其他域名与SSL承载平均堆栈应用程序... – SoftTimur

回答

4

这不是displayDialogAsync就是这样做的。它是Angular路由和Angular位置策略的常见问题。搜索“角度的应用程序是添加散列到我的网址”,你会发现很多关于它和解决方案的信息。

+0

我可以打开好'https:// localhost:3000/preview/tmp/6wr-4PqdBrYQwjp3AAAD'在浏览器中,它是'displayDialogAsync',增加了散列... – SoftTimur

+0

我不同意。这不是Office.js中为URL添加散列值的代码。但是当你使用某些位置策略时,Angular存在。请做我建议的搜索。你会发现它不会发生在每个网址上。这是一个复杂的现象。 –

+0

我昨天编辑了OP ...我的测试表明,如果我删除'html5-history-api',hash不会被添加,所以'displayDialogAsync'和'html5-history-api'之间会有冲突。但我必须使用'html5-history-api'作为整个应用程序,因为[this](https://stackoverflow.com/questions/42642863/office-js-nullifies-browser-history-functions-breaking-history-使用/ 42703406#42703406)。 – SoftTimur