背景: 我有一个Outlook外挂程序,它基本上会打开一个登录对话框,从中打开在我的网站上托管的外挂程序页面用户从这里重定向到auth0,从那里他重定向到login.live.com并发布auth,我得到一个代码或错误回到我的网站上的另一个页面。
现在,在Outlook胖客户端中一切正常。当我手动关闭对话框时,在父级中获得正确的错误代码。
问题: 使用OWA并将托管插件代码托管在我的网站上时,控件不会从对话框返回到该部分。
我已经在“ AppDomains”中添加了用户可以访问的所有URL。并且已经确认父窗口和子窗口都托管在同一域(和子域)中。
代码
manifest.xml
<AppDomains>
<AppDomain>https://auth0url.auth0.com</AppDomain>
<AppDomain>https://localhost</AppDomain>
<AppDomain>https://login.live.com</AppDomain>
<AppDomain>https://login.microsoftonline.com</AppDomain>
<AppDomain>https://my.website.com</AppDomain>
index.html(开瓶器HTML)
<!-- Load the Office JavaScript APIs -->
<script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/Office.js" type="text/javascript"></script>
<script src="index.js"></script>
index.js
// height and width are percentages of the size of the screen.
Office.context.ui.displayDialogAsync(fullUrl, {height: 45, width: 55, displayInIframe: false},
function (asyncResult) {
console.log(asyncResult);
if (asyncResult.status === "failed") {
//Error code 12009 means "user chose to ignore the dialog box"
if (asyncResult.error.code === 12009) {
// Handle failure
} else {
// Do something else
}
} else {
dialog = asyncResult.value;
dialog.addEventHandler(Office.EventType.DialogMessageReceived, handleToken);
dialog.addEventHandler(Office.EventType.DialogEventReceived, dialogClosing);
}
});
popupRedirect.js(仅在mywebsite上托管(与父窗口相同),此文件将json字符串触发回到父级)
Office.initialize = function() {
$(document).ready(function () {
// Some Code before this and after this not relevent to issue
var messageObject = {outcome: "something"};
// Tell the task pane about the outcome.
Office.context.ui.messageParent(jsonMessage);
...
});
});
预期结果:
“ messageParent”应触发在index.js的“ handleToken”中编写的代码
实际结果(可能不相关)
appsforoffice.micros…16.01.debug.js:8202 Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('auth0url.auth0.com') does not match the recipient window's origin ('https://my.website.com').
用handleToken
编写的代码不会被触发。
请注意:displayInIframe: true
不能正常工作,因为login.live.com不允许iframe。
使用的测试环境:
Google Chrome 71.0.3578.98(正式版本)(64位)(同类:稳定) 修订15234034d19b85dcd9a03b164ae89d04145d8368-refs / branch-heads / 3578 @ {#897} 操作系统Windows 10 JavaScript V8 7.1.302.31 Flash 32.0.0.101
答案 0 :(得分:1)
我们的问题终于解决了,但我不知道为什么这应该是一个问题。这可能是特定于我们的设置的,但无论如何这里是:
我们使用了托管在auth0url.auth0.com域上的auth0。在对话框控件中,该控件从my.website.com传递到auth0url.auth0.com,然后是MS登录屏幕,然后返回my.website.com,而我们
appsforoffice.micros…16.01.debug.js:8202 Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('auth0url.auth0.com') does not match the recipient window's origin ('https://my.website.com')
那么什么改变解决了这个问题?
Auth0还支持自定义域而不是自定义域,这意味着当我们从auth0url.auth0.com更改为myauth0.mywebsite.com(当然,我们将其添加到AppDomains中)时,该插件可以执行“ postMessage”。>