簡體   English   中英

拒絕顯示框架,因為它在 android webview 中將 X-Frame-Options 設置為“DENY”

[英]Refused to display a frame because it set X-Frame-Options to 'DENY in 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' is set to 'DENY'意思)。

如果您將日歷設為公開可見,日歷只會顯示它,而不會先嘗試讓您登錄。 關於如何共享日歷,請參見: https : //support.google.com/calendar/answer/37083

您可以通過創建一個將日歷嵌入 iframe 的簡單測試頁面,然后在未登錄 Google 服務的 Google Chrome 隱身窗口中打開它,在桌面上簡單地測試這是否適用於 WebView。 在您公開共享日歷之前,Chrome 也將拒絕顯示日歷。

如果您的日歷不是公開的,請確保您已登錄並接受第三方 cookie。 否則 google 會將您轉發到登錄頁面,這將導致錯誤,因為在 iframe 中,google 將拒絕訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM