Refusé d'afficher dans un cadre parce qu'il a placé 'X-Frame-Options' à 'SAMEORIGIN'

je suis en train de développer un site web qui est censé être réactif afin que les gens puissent y accéder à partir de leurs téléphones. Le site a quelques parties sécurisées qui peuvent être connectés en utilisant Google, Facebook, ...etc (OAuth).

le serveur backend est développé en utilisant ASP.Net Web API 2 et l'avant est principalement AngularJS avec un peu de rasoir.

Pour la partie authentification, tout fonctionne correctement dans tous les navigateurs y compris Android, mais Google authentification ne fonctionne pas sur iPhone et il me donne ce message d'erreur

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'.

en ce qui me concerne, je n'utilise pas d'iframe dans mes fichiers HTML.

j'ai cherché sur Google, mais aucune réponse ne m'a permis de résoudre le problème.

219
demandé sur Kyle 2013-12-10 19:45:48

11 réponses

j'ai trouvé une meilleure solution, peut-être qu'elle peut aider quelqu'un remplacer "watch?v=" par "v/" et cela fonctionnera

var url = url.replace("watch?v=", "v/");
155
répondu Aymen Mouelhi 2016-10-03 13:07:48

O. K. après avoir passé plus de temps avec l'aide de ce post

"151950920 de" Surmonter "Afficher interdit par X-Frame-Options"

j'ai réussi à résoudre le problème en ajoutant &output=embed à la fin de l'url avant de poster l'URL de google:

var url = data.url + "&output=embed";
window.location.replace(url);
75
répondu Ali Hmer 2017-05-23 12:10:26

ils ont défini L'en-tête à SAMEORIGIN dans ce cas, ce qui signifie qu'ils ont refusé le chargement de la ressource dans une iframe en dehors de leur domaine. Donc cet iframe n'est pas capable d'afficher le domaine croisé

enter image description here

Pour ce faire, vous devez correspondre à l'emplacement de votre apache ou tout autre service que vous utilisez

si vous utilisez apache alors dans httpd.fichier conf.

  <LocationMatch "/your_relative_path">
      ProxyPass absolute_path_of_your_application/your_relative_path
      ProxyPassReverse absolute_path_of_your_application/your_relative_path
   </LocationMatch>
25
répondu Ibtesam Latif 2016-01-26 18:57:37

essayer d'utiliser

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

vous pouvez trouver tout le code embededed dans la section' Embededed Code 'et qui ressemble à ceci

<iframe width="560" height="315"  src="https://www.youtube.com/embed/YOUR_VIDEO_CODE" frameborder="0" allowfullscreen></iframe>
25
répondu Bogdan Alexandru Militaru 2016-03-20 11:37:46

si vous utilisez iframe pour vimeo, changez l'url de:

https://vimeo.com/63534746

à:

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

ça me va.

16
répondu Shakir Muhammed 2015-06-18 09:47:12

pour incorporer une vidéo youtube dans votre page angularjs, vous pouvez simplement utiliser le filtre suivant pour votre vidéo ""

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>
11
répondu Irfan Muhammad 2017-02-20 08:48:58

j'ai fait les changements ci-dessous et fonctionne très bien pour moi.

il suffit d'ajouter l'attribut <iframe src="URL" target="_parent" />

_parent : ceci ouvrirait la page intégrée dans la même fenêtre.

_blank : dans un onglet différent

4
répondu rahulnikhare 2016-06-28 11:57:07

console.developer.google.com et ajouter le domaine d'application à la section" origines Javascript " des justificatifs D'identité outh 2.

3
répondu parliament 2014-12-03 05:04:15

un peu tard, mais cette erreur peut aussi être causée si vous utilisez un native application Client ID au lieu d'un web application Client ID .

2
répondu Kevin 2015-02-24 18:27:06

Merci pour la question. Pour YouTube iframe la première question Est L'URL que vous avez donné, est-il intégré URL ou lien URL de la barre d'adresse. cette erreur pour L'URL non embed mais si vous voulez donner L'URL non embed alors vous devez coder dans "Safe Pipe" comme(pour les deux URL non embedded ou embed):

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);
        }

     }

   }
}

il séparera "vedioId". Vous devez obtenir l'id de la vidéo puis défini à L'URL comme intégré. En Html

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

angle 2/5 merci encore.

2
répondu Rahat Ansari 2018-04-22 13:20:36

il y a une solution qui a fonctionné pour moi, en se référant au parent. Après avoir obtenu l'url qui redirigera vers la page d'authentification google, vous pouvez essayer le code suivant:

var loc = redirect_location;      
window.parent.location.replace(loc);
0
répondu Dimtris Voudrias 2018-02-15 10:35:49