javascript - 拒绝显示框架,因为它在 android webview 中将 X-Frame-Options 设置为 'DENY

标签 javascript android html webview android-webview

当我尝试在 webview 中显示谷歌日历时,它显示了一些错误:

[INFO:CONSOLE(0)] "Refused to display 'https://accounts.google.com/ServiceLogin?service=cl&passive=1209600&continue=https://www.google.com/calendar/embed?src%3Detlwhk@gmail.com%26ctz%3DAsia/Hong_Kong&followup=https://www.google.com/calendar/embed?src%3Detlwhk@gmail.com%26ctz%3DAsia/Hong_Kong&btmpl=mobile&ltmpl=mobilex&scc=1' in a frame because it set 'X-Frame-Options' to 'DENY'.", source: about:blank (0)

这是html代码

<p><iframe style="border: 0;" src="https://www.google.com/calendar/embed?src=etlwhk%40gmail.com&amp;ctz=Asia/Hong_Kong&amp;output=embed" width="800" height="600" frameborder="0" scrolling="no"></iframe></p>

Android端是一些简单的webview代码

        StringBuilder sb = new StringBuilder();
        sb.append("<HTML><HEAD><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0'><style>img{display: inline; height: auto; max-width: 100%}iframe{width:100%}</style></HEAD><body>");
        sb.append(page.page_content_chi.toString());
        sb.append("</body></HTML>");
        webview.loadDataWithBaseURL("file:///android_asset/", sb.toString(), "text/html", "utf-8", null); 

如何修复错误?感谢您的帮助。

最佳答案

您需要公开您的日历。这就是正在发生的事情——因为您尝试显示的日历未公开共享,Google 日历首先想知道您是谁,以便决定向您显示什么,因此它会将您带到 Google 登录页面.登录页面通过禁止在 iframe 中显示自身来保护自己免受点击劫持(这就是 'X-Frame-Options' 设置为 'DENY' 的意思)。

如果您将日历设置为公开可见,日历将只显示它,而不会先尝试让您登录。关于如何共享日历,请参见:https://support.google.com/calendar/answer/37083

您可以通过创建一个将日历嵌入 iframe 的简单测试页面,然后在您未登录 Google 服务的 Google Chrome 的隐身窗口中打开它,在桌面上简单地测试这是否适用于 WebView。除非您将其公开共享,否则 Chrome 也会拒绝显示日历。

关于javascript - 拒绝显示框架,因为它在 android webview 中将 X-Frame-Options 设置为 'DENY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28574354/

相关文章:

android - 无法运行应用程序 - "The target device does not support the ' run-as'命令”

android - EndlessRecyclerViewScrollListener 不显示 recyclerview 上的所有项目

html - 无论我做什么,视差图像都会放大

php - 根据屏幕尺寸,每列具有不同数量的元素的 Bootstrap 网格

javascript - 为什么复选框验证在 Parsley.js 中不起作用?

javascript - useState/useReducer 的初始化函数必须是纯函数吗?

javascript - 从 Dropzone 中的服务器加载的文件显示在队列中

linux - 64 位 Linux 机器上的 Android SDK

javascript - 如果检查输入,则更改标签的背景颜色

javascript - 在 JavaScript 中基于十六进制颜色创建 IF 条件