Office js window.close()在Windows Excel 2016的加载项对话框中不起作用

Office js window.close()在Windows Excel 2016的加载项对话框中不起作用,office-js,Office Js,我在一个对话框中调用window.close(),该对话框是由Excel 2016(build 4266)中的dialog API在我的windows上创建的。但是对话框窗口将不会关闭。同样的代码也适用于Mac Office和Excel online。这是一个bug吗?谢谢你的提问。不,这不是一个错误。正如Ricky所提到的,您需要从主机页调用dialog.close,如上所示。它在某些平台上工作的事实是偶然的,这不是我们测试或支持的。我们确实认为有一种关闭对话框的方法是有意义的,但如果/当我们

我在一个对话框中调用window.close(),该对话框是由Excel 2016(build 4266)中的dialog API在我的windows上创建的。但是对话框窗口将不会关闭。同样的代码也适用于Mac Office和Excel online。这是一个bug吗?

谢谢你的提问。不,这不是一个错误。正如Ricky所提到的,您需要从主机页调用dialog.close,如上所示。它在某些平台上工作的事实是偶然的,这不是我们测试或支持的。我们确实认为有一种关闭对话框的方法是有意义的,但如果/当我们实现它时,它将是office.js的API部分,而不是通用的window.close


要进一步展开,window.close不起作用的原因是该对话框不仅仅是一个标准的浏览器窗口。根据平台和模式,该对话框使用不同的结构显示,例如,在Win32上,它是一个嵌入了webview的windows对话框;在Office Online上(取决于通过API displayAsIframe标志设置的模式),它是一个新窗口或带有Iframe的浮动div。虽然我们可以捕获/覆盖window.close以使对话框自身关闭,但它也可能导致混淆,因为其他窗口方法无法工作。因此,归根结底,对话框是一个对象,其生命周期由office.js提供的平台/api控制,而不是一个通用的浏览器窗口。加载office.js以调用其中包含的任何API需要显示的页面。即使我们要覆盖window.close,您仍然需要加载我们的javascript以使覆盖生效。总之,您确实需要在页面中加载office.js来调用我们的API。要关闭对话框,今天必须从其父级执行,将来我们希望提供一个显式的关闭方法,您可以调用对话框本身

谢谢你提起这件事,它开始了一次很好的内部对话。就我个人而言,我确实认为我们应该让
window.close
按照您的预期运行,特别是因为它听起来已经在三分之二的平台上运行了


关于你对Humberto回答的评论:关于在没有Office.js的情况下实现这一功能的部分——我不确定我们是否能做到。我想你仍然需要在你想要关闭的页面上有一个Office.js引用,否则我简直无法想象我们怎么能对window.close逻辑进行monkeypatch。但无论如何,感谢您提出这个问题,我们会考虑一下…

我不知道为什么它不起作用,但这不是关闭对话框API创建的对话框的标准方式。通常,您应该从主机页调用dialog.close。有关详细信息,请参阅感谢回复Humberto。我的情况是,该对话框是一个相当独立的页面,甚至不加载office.js。它保存了一些东西到我们的服务器,我想有一个关闭按钮的用户后,工作完成。这不是一个使用对话框的常见情况吗?我编辑了我的答案,以扩展其基本原理。谢谢,你能帮我吗?