Je développe un site Web qui est censé être réactif afin que les gens puissent y accéder à partir de leur téléphone. Certaines parties sécurisées du site peuvent être connectées à l'aide de Google, Facebook, etc., etc. (OAuth).
Le backend du serveur est développé à l’aide de l’API Web ASP.Net 2 et le front-end est principalement AngularJS avec certains Razor.
Pour la partie authentification, tout fonctionne correctement dans tous les navigateurs, y compris Android, mais l'authentification de Google ne fonctionne pas sur l'iPhone et 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 aucun iframe dans mes fichiers HTML.
J'ai cherché sur Google, mais aucune réponse ne m'a permis de résoudre le problème.
D'ACCORD. après avoir passé plus de temps là-dessus à l’aide de ce SO post
Surmonter "Affichage 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 sur l'URL de Google:
var url = data.url + "&output=embed";
window.location.replace(url);
J'ai trouvé une meilleure solution, peut-être que cela pourrait aider quelqu'un Remplacer "watch?v="
par "v/"
et cela fonctionnera
var url = url.replace("watch?v=", "v/");
Essayez d'utiliser
Vous pouvez trouver tout le code intégré dans la section 'Code intégré' et cela ressemble à ceci
<iframe width="560" height="315" src="https://www.youtube.com/embed/YOUR_VIDEO_CODE" frameborder="0" allowfullscreen></iframe>
Ils ont défini l'en-tête sur SAMEORIGIN dans ce cas, ce qui signifie qu'ils ont interdit le chargement de la ressource dans une iframe en dehors de leur domaine. Donc, cette iframe n'est pas capable d'afficher des domaines croisés
Pour ce faire, vous devez faire correspondre le lieu dans votre Apache ou tout autre service que vous utilisez.
Si vous utilisez Apache, utilisez le fichier 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>
Si vous utilisez iframe pour vimeo, modifiez l'URL à partir de:
à:
Ça marche pour moi.
Pour intégrer la vidéo youtube à 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>
J'ai fait les modifications ci-dessous et fonctionne bien pour moi.
Ajoutez simplement l'attribut <iframe src="URL" target="_parent" />
_parent
: cela ouvrirait la page incorporée dans la même fenêtre.
_blank
: dans un onglet différent
Pour moi, le correctif consistait à accéder à console.developer.google.com et à ajouter le domaine d'application à la section "Javascript Origins" des informations d'identification OAuth 2.
Merci pour la question . Pour YouTube iframe le premier numéro est l’URL que vous avez indiquée, s’agit-il d’une URL ou d’un lien URL intégré à partir de la barre d’adresse? alors vous devez coder dans "safe Pipe" comme (pour les URL incorporées ou non incorporées):
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 se séparera "vedioId". Vous devez obtenir l'id de la vidéo, puis définir l'URL comme étant intégrée . En HTML
<div>
<iframe width="100%" height="300" [src]="video.url | safe"></iframe>
</div>
Angulaire 2/5 Merci encore.
Un peu tard, mais cette erreur peut aussi être provoquée si vous utilisez un native application Client ID
au lieu d'un web application Client ID
.
Couru dans ce problème similaire lors de l'utilisation d'iframe pour déconnecter des sous-sites avec des domaines différents. La solution que j'ai utilisée était de charger d'abord l'iframe, puis de mettre à jour la source après le chargement du cadre.
var frame = document.createElement('iframe');
frame.style.display = 'none';
frame.setAttribute('src', 'about:blank');
document.body.appendChild(frame);
frame.addEventListener('load', () => {
frame.setAttribute('src', url);
});
Une solution simple consiste à ajouter l'extension "Ignorer les en-têtes X-Frame" à votre chrome.
Il y a une solution qui a fonctionné pour moi, 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);