是否有一种方法可以在React应用中实现Google日历的iframe,而无需自己手动处理事件?
就像Web应用一样,iapp会显示iframe,供他们登录Google日历,然后将其显示在特定框中。
我只能使用日历库找到解决方案,而不能使用我正在考虑的方法。
答案 0 :(得分:0)
Google已将对https://calendar.google.com/calendar/r
(默认日历主页)的请求的“ X-Frame-Options”响应标头设置为sameorigin
,这意味着不是工作:
<h2>Your Calendar:</h2>
<iframe src="https://calendar.google.com/calendar/r"></iframe>
如果您尝试这样做,将会得到Refused to display '<URL>' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
。本质上,唯一可以嵌入默认日历页面的域就是Google自己的域。
话虽如此,这里有一些有趣的选项。如果您知道用户的Gmail地址,即使他们的日历是私人的,只要他们登录了,他们就可以看到一个iframe,其来源等于'https://calendar.google.com/calendar/embed?src=' + encodeURI(email);
。
演示:JSfiddle link(内置的嵌入工具让我很伤心)。
但是,如果他们尚未登录,则很难像您所要求的那样检测并显示Google登录页面。如果未登录,则带有GCal嵌入URL的iframe将自动重定向到登录页面,但是由于登录页面的x-frame-options设置为sameorigin
,因此将被阻止加载到iframe中。要查看实际效果,请在注销的隐身窗口中尝试上述演示,然后输入您的Gmail电子邮件。
此外,据我所知,您无法检测到iframe的加载是否被Java脚本的x-frame-options阻止了,因此,如果日历无法加载。
我觉得检查登录状态最可靠的方法是通过the Google Sign-in button。此外,Google还有一个full API just for their Calendar product,包括端点that would tell you which calendars a user has。