3
votes

position: corrigé ne fonctionne pas sous iOS lors du chargement du site angulaire dans iframe dans Ionic 3

Brève description de ce que nous essayons d'accomplir

Nous développons une application Angular . Nous l'avons développé pour le Web et le mobile en utilisant la même base de code. La version mobile contient de nombreuses fonctionnalités telles que les notifications push , les abonnements SMS , etc. Nous espérons publier la version mobile sur l'App Store et le Play Store. Nous utilisons une simple application Ionic 3 pour la créer sur Android et iOS.

L'application Ionic 3 ne contient qu'une seule page dans laquelle nous chargeons notre site Web angulaire dans un iframe

HTML de la page Ionic

.footer{
    position: fixed;
    bottom: 0;
    width: 100%;
  background-color:#47454b;
}
h3 {
  color: white;
  padding:0px 50px;
}

TS de la page Ionic

<footer class="footer">
    <h3>This is footer</h3>
</footer>

Rechercher Le référentiel Github de l'application Ionic 3 Ici a>.

J'ai créé StackBlitz un projet angulaire similaire à My Angular application. Trouvez-le ici .

Mon problème

Dans mon application, app-header et app-footer doivent être fixés sur ViewPort et les autres contenus devraient pouvoir défiler. J'ai réussi atteint cet objectif pour Android Mais sous iOS, app-header et app-footer ne sont pas fixés à ViewPort et ceux-ci défilent avec d'autres contenus lorsque je charge mon application Angular dans un iframe dans l'application Ionic.

header.component.html

.main {
    background-color: #46454A;
    color: rgba(255,255,255,.6);
    padding:5px 50px;
}

header{
  position: fixed;
  z-index: 10;
  top: 0;
  width: 100%;
}

header.component.css

<header>
  <div class="main">
        <h3>Countries</h3>
    </div>
</header>

footer.component.html

export class HomePage {
  iframeSrc: any;

  sanitizer: DomSanitizer;
  url: string = 'https://angular-load-ionic-iframe.stackblitz.io';

  constructor( sanitizer: DomSanitizer ) {
    this.sanitizer = sanitizer;
    this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.url);

  }
}

footer.component.css

<ion-content>
  <iframe class= 'webPage' [src]="iframeSrc" webkitAllowFullScreen mozallowfullscreen allowFullScreen>
  </iframe>
</ion-content>

Je n'ai pas pu comprendre S'agit-il d'un problème de CSS avec iOS ou Est-ce qu'il s'est produit pendant charger le site Web angulaire dans iframe . Lutte pendant un jour mais toujours pas de succès. Si quelqu'un peut m'aider à résoudre ce problème, très apprécié et si quelqu'un a besoin de plus de détails à ce sujet, n'hésitez pas à commenter.


0 commentaires

4 Réponses :


1
votes

Avez-vous essayé de définir tout le mode d'application / style de plate-forme sur md via la configuration de l'application? Si vous parvenez à résoudre ce problème sur Android, peut-être que l'adoption de styles Android globalement pour la version iOS le résoudra également pour cette plate-forme?

// app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { IonicModule } from '@ionic/angular';
import { AppComponent } from './app.component';
import { HeaderComponent } from './header/header.component';
import { FooterComponent } from './footer/footer.component';
import { HomeComponent } from './home/home.component';

@NgModule({
  imports:      [ 
    BrowserModule, FormsModule,
    IonicModule.forRoot({
      mode: 'md'
    }),  
  ],
  declarations: [ AppComponent, HeaderComponent, FooterComponent, HomeComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }


3 commentaires

Merci pour votre réponse. J'ai essayé vos solutions. Mais cela n'a pas résolu mon problème. Je ne peux pas imaginer que ce problème se soit produit lorsque je charge le site Angular dans iframe . Mais lorsque je débogue mon application iOS en safari, cela montre que tous les styles requis sont appliqués. De toute façon merci pour vos efforts.


Pas de problème, ça vaut le coup d'essayer, c'est une configuration assez inhabituelle, donc je pense que vous aurez du mal à obtenir de l'aide sur ce problème.


Oui, c'est en fait inhabituel. Je suis déjà passé un jour là-dessus. mais n’a pas encore pu trouver de solution. De toute façon merci pour votre réponse.



1
votes

Je ne suis pas familier avec ionic et votre configuration angulaire mais: il y a un bogue de position similaire dans les navigateurs Safari.

Le problème est que vous ne pouvez pas positionner les éléments fixes qui sont directement les enfants de la balise body.

La solution est: envelopper le contenu dans un autre div. Et mettre tout à l'intérieur.

Vous pouvez peut-être essayer de placer votre élément Header et footer dans un div supplémentaire pour que le pied de page ne soit pas un enfant direct de la balise body.


1 commentaires

Merci pour votre réponse. Mais ce n'est pas le cas. Le problème est avec iframe . sans iframe tous les styles sont appliqués dans l'iPhone selon mes besoins



2
votes

mettez ce css dans votre style.css

body {
    margin: 0px;
}
h3 {
  color: white;
  padding:0px 50px;
}
my-app{
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  left: 0;
}

app-header,app-home,app-footer{
  position: absolute;
  left: 0;
  width: 100%;
}
app-header,app-footer{
  text-align: center;
  color: white;
  height: 50px;
   background-color:#47454b;
}
app-header{
  top:0;
}
app-footer{
  bottom:0;
}
app-home {
  top: 50px;
  bottom: 50px;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}

supprimez tous les css de header.component.css et footer.component.css code >

voici le lien stackblitz https://stackblitz.com/edit/angular-load-ionic-iframe-knkgq4?file=src%2Fstyles.css


2 commentaires

Merci pour votre réponse. Je vais essayer.


@Imon Merci beaucoup. votre réponse fonctionne comme un charme. tu me sauves la vie.



1
votes

Pas essayé, mais ça vaut le coup d'essayer:

style.css

position: relative;

}

home.component.html

XXX

footer.component.css

.footer{
    position: fixed;
    bottom: 0;
    width: 100%;
  background-color:#47454b;
  z-index:99;
}
h3 {
  color: white;
  padding:0px 50px;
}

J'ai eu des problèmes similaires dans IE avec un pied de page et un en-tête collants, cela fait l'affaire pour moi. Vous avez dit que vous utilisiez des iframes, mais que vous ne pouviez pas en trouver dans votre fork, uniquement du contenu enveloppé de div ... si vous incluez l'iframe, vous pouvez essayer d'appliquer un positionnement relatif pour l'iframe comme

<div style="display: block;">
    <div class="container" *ngFor="let country of countries">
        <div class="code"><strong>Code:</strong> {{country.countryCode}}</div>
        <div class="name"><strong>Name:</strong> {{country.countryName}}</div>
    </div>
</div>

pour éviter une collision avec l'en-tête et le pied de page. J'espère que cela vous aidera.


0 commentaires