Отказался отображать в кадре, потому что он установил "X-Frame-Options" в "SAMEORIGIN"


Я разрабатываю веб-сайт, который должен быть отзывчивым, чтобы люди могли получить доступ к нему со своих телефонов. На сайте есть некоторые защищенные части, которые можно войти в систему с помощью Google, Facebook,...и т. д. (протокол OAuth).

серверная часть разрабатывается с использованием ASP.Net веб-API 2 и передний конец в основном AngularJS с некоторой бритвой.

для части аутентификации все работает нормально во всех браузерах, включая Android, но аутентификация Google не является работа на 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'.

теперь, насколько мне известно, я не использую iframe в своих HTML-файлах.

я погуглил, но ни один ответ не заставил меня исправить проблему.

11 219

11 ответов:

Я нашел лучшее решение, это может помочь кому-то заменить "watch?v=" by "v/" и это будет работать

var url = url.replace("watch?v=", "v/");

ОК, потратив больше времени на это с помощью этого so post

преодоление "отображение запрещено X-Frame-Options"

мне удалось решить эту проблему, добавив &output=embed до конца url-адреса перед отправкой на URL-адрес google:

var url = data.url + "&output=embed";
window.location.replace(url);

в этом случае они установили заголовок SAMEORIGIN, что означает, что они запретили загрузку ресурса в iframe за пределами своего домена. Так что этот iframe не может отображать кросс-домен

enter image description here

для этого вам нужно соответствовать местоположению в вашем 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>

попробуйте использовать

https://www.youtube.com/embed/YOUR_VIDEO_CODE

вы можете найти весь встроенный код в разделе "встроенный код", и это выглядит так

<iframe width="560" height="315"  src="https://www.youtube.com/embed/YOUR_VIDEO_CODE" frameborder="0" allowfullscreen></iframe>

Если вы используете iframe для vimeo, измените url:

https://vimeo.com/63534746

to:

http://player.vimeo.com/video/63534746

Это работает для меня.

для вставки видео youtube на вашу страницу angularjs вы можете просто использовать следующий фильтр для вашего видео

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: это откроет встроенную страницу в том же окне.

_blank: в другой вкладке

для меня исправление должно было войти console.developer.google.com и добавьте домен приложения в раздел" JavaScript Origins " учетных данных OAuth 2.

немного поздно, но эта ошибка также может быть вызвана, если вы используете native application Client ID вместо web application Client ID.

Спасибо за вопрос. Для YouTube iframe первая проблема-это URL, который вы дали, это встроенный URL или ссылка URL из адресной строки. эта ошибка для неинвазивного URL, но если вы хотите дать неинвазивный URL, то вам нужно кодировать в "безопасном канале", например(как для неинвазивного, так и для встроенного URL ):

import {Pipe, PipeTransform} from '@angular/core';
import {DomSanitizer} from '@angular/platform-browser';

@Pipe({name: 'safe'})
export class SafePipe implements PipeTransform {

constructor(private sanitizer: DomSanitizer) {

}

transform(value: any, url: any): any {
    if (value && !url) {
        const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
        let match = value.match(regExp);
        if (match && match[2].length == 11) {
            console.log(match[2]);
            let sepratedID = match[2];
            let embedUrl = '//www.youtube.com/embed/' + sepratedID;
            return this.sanitizer.bypassSecurityTrustResourceUrl(embedUrl);
        }

     }

   }
}

он будет расколот "ведиоид". Вы должны получить идентификатор видео, а затем установить URL как встроенный. В Html

 <div>
   <iframe width="100%" height="300" [src]="video.url | safe"></iframe>
 </div>

угловая 2/5 спасибо снова.

есть решение, которое сработало для меня, ссылаясь на родителя. После получения url-адреса, который перенаправит на страницу аутентификации google, вы можете попробовать следующий код:

var loc = redirect_location;      
window.parent.location.replace(loc);