我在Windows 2016中的Excel 2016(build 4266)中由Dialog API创建的对话框中调用window.close()。但对话框窗口不会关闭。相同的代码适用于Mac Office和Excel在线。这是一个错误吗?
答案 0 :(得分:1)
谢谢你的提问。不,这不是一个bug。正如Ricky所提到的,你需要从主页上调用dialog.close,如documentation所示。它在某些平台上运行的事实是偶然的,它不是我们测试或支持的东西。我们认为让对话框关闭自己是有道理的,但是如果/当我们实现它时,它将是office.js的API部分,而不是通用的window.close。
为了进一步扩展,window.close不起作用的原因是对话框不仅仅是标准的浏览器窗口。根据平台和模式,对话框使用不同的结构显示,例如,在Win32上,它是一个Windows对话框,其中嵌入了webview,在Office Online上(取决于您通过API displayAsIframe标志设置的模式),它是一个新窗口或一个带有iframe的浮动div。虽然我们可以捕获/覆盖window.close以使对话关闭,但它也可能导致混乱,因为其他窗口方法不起作用。因此,在一天结束时,对话框是一个对象,其生命周期由office.js提供的平台/ API控制,而不是通用浏览器窗口。您显示的页面需要加载office.js以调用其中包含的任何API。即使我们要覆盖window.close,你仍然需要加载我们的javascript以使覆盖生效。因此,总结一下,您需要在页面中加载office.js来调用我们的API。要关闭对话框,今天你必须从它的父对象开始,将来我们想要提供一个可以在对话框本身上调用的显式关闭方法。
答案 1 :(得分:1)
感谢您提出这一点,它启动了良好的内部对话。就个人而言,我确实认为我们应该让window.close
表现得像你期望的那样,特别是因为它听起来已经在三分之二的平台上表现出来了。
关于你对Humberto的回答的评论:关于在没有Office.js的情况下让它工作的部分 - 我不确定我们是否可以这样做。我想你仍然需要在你想要关闭的页面上使用Office.js参考,否则我无法想象我们如何能够monkeypatch window.close逻辑。但无论如何,感谢你提出这个问题,我们会考虑一下......