拒绝在框架中显示,因为它将“X-Frame-Options”设置为“SAMEORIGIN”
我正在开发一个应该有响应的网站,以便人们可以通过手机访问它。 该网站有一些安全的部分,可以使用谷歌,脸谱等…(OAuth)login。
服务器后端是使用ASP.Net Web API 2开发的,前端主要是AngularJS和一些Razor。
对于身份validation部分,在所有浏览器(包括Android)中,一切正常,但Google身份validation在iPhone上不起作用,它给了我这个错误消息
Refused to display 'https://accounts.google.com/o/openid2/auth ?openid.ns=http://specs.openid.ne…tp://axschema.org/namePerson /last&openid.ax.required=email,name,first,last' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
现在就我而言,我不在我的HTML文件中使用任何iframe。
我googlesearch,但没有答案让我解决这个问题。
我find了一个更好的解决scheme,也许它可以帮助有人用"v/"
replace"watch?v="
,它将起作用
var url = url.replace("watch?v=", "v/");
好吧,在这个SOpost的帮助下花费更多的时间
克服“X-Frame-Options禁止显示”
我设法解决这个问题,通过添加&output=embed
到URL的末尾之前发布到谷歌url:
var url = data.url + "&output=embed"; window.location.replace(url);
尝试使用
你可以在“embedded代码”部分find所有的embedded代码,看起来像这样
<iframe width="560" height="315" src="https://www.youtube.com/embed/YOUR_VIDEO_CODE" frameborder="0" allowfullscreen></iframe>
在这种情况下,他们已将标题设置为SAMEORIGIN,这意味着它们已经禁止在其域外的iframe中加载资源。 所以这个iframe不能显示跨域
为此,您需要匹配您的apache或您正在使用的任何其他服务的位置
如果你使用的是Apache,那么在httpd.conf文件中。
<LocationMatch "/your_relative_path"> ProxyPass absolute_path_of_your_application/your_relative_path ProxyPassReverse absolute_path_of_your_application/your_relative_path </LocationMatch>
如果您正在使用iframe for vimeo,请将url更改为:
至:
这个对我有用。
要将youtubevideoembedded到您的angularjs页面,您可以简单地使用以下filter来处理video
app.filter('scrurl', function($sce) { return function(text) { text = text.replace("watch?v=", "embed/"); return $sce.trustAsResourceUrl(text); }; });
<iframe class="ytplayer" type="text/html" width="100%" height="360" src="{{youtube_url | scrurl}}" frameborder="0"></iframe>
我做了下面的变化,并为我工作得很好。
只需添加属性<iframe src="URL" target="_parent" />
_parent
:这将在同一窗口中打开embedded式页面。
_blank
:在不同的标签
对于我来说,修正是进入console.developer.google.com并将应用程序域添加到OAuth 2凭据的“Javascript起源”部分。
稍晚,但是如果您使用native application Client ID
而不是web application Client ID
,则也会导致此错误。