Lade iOS 'Smart App Banner' über JavaScript

9

Ich habe einige Probleme mit einem iOS Smart App-Banner , die ich durch JavaScript hinzufügen möchte.

Der eigentliche Smartbanner ist so einfach wie das Hinzufügen dieses kleinen Blocks zum Kopf des HTML:

%Vor%

Leider bin ich ziemlich eingeschränkt in der Art, wie ich mein Skript hochladen kann. Ich kann den HTML-Code nicht direkt ändern, also mache ich das über unseren Tag-Manager, der im Grunde über JavaScript funktioniert. Aber es stellt sich heraus, dass dies nicht funktioniert.

Ich habe versucht, den Fall zum Testen zu vereinfachen:

  1. Hardcodiertes Tag im HTML: funktioniert (wie erwartet)

    %Vor%
  2. Wird direkt nach der Fertigstellung des Dokuments mit JavaScript eingefügt: funktioniert

    %Vor%
  3. Wird mit JavaScript nach einer setTimeout Verzögerung eingefügt: FUNKTIONIERT NICHT

    %Vor%

Kann jemand bestätigen oder erklären, warum dieses verzögerte JavaScript nicht funktioniert?

Wichtig: Zum Testen öffnen Sie die Seite auf einem echten iOS-Gerät! Desktop Safari / Chrome oder iOS Emulator funktioniert nicht. Auch schließt das Banner nicht , da es nicht ein zweites Mal angezeigt wird.

AKTUALISIEREN :

Ich habe einige Beispiele ohne jQuery hinzugefügt, also einfach JavaScript. Aber die Ergebnisse sind die gleichen. Sobald wir auf setTimeout() warten, kann das Smart App Banner nicht geladen werden.

  1. Vanille JavaScript - direkte Ausführung. funktioniert

    %Vor%
  2. Vanille JavaScript - verzögerte Ausführung. FUNKTIONIERT NICHT

    %Vor%

UPDATE 2 :

Das genau gleiche unglückliche Verhalten kann beobachtet werden, wenn das Skript asynchron geladen wird

  1. Asynchrones Laden FUNKTIONIERT NICHT

    %Vor%

    Was dann das gleiche Vanilla-JavaScript mit direkter Ausführung aufruft     showBanner ();

    %Vor%

SCHLUSSFOLGERUNG :

Ich kann nur schlussfolgern, dass iOS Safari nur den Smartbanner des HTML im primären Thread sucht. Und das macht mich traurig: - (

Nur das direkt verfügbare HTML oder HTML, das synchron über JavaScript hinzugefügt wird. Aber keine a-sync-Aktion ist zulässig, sei es das Laden des JavaScript asynchron oder die Verwendung von setTimeout() (oder eines anderen Konstrukts, das eval() verwendet)

    
Koesper 08.07.2015, 10:08
quelle

2 Antworten

0

Ab April 2017 wird das intelligente Banner angezeigt, wenn es später per JavaScript hinzugefügt wird.

    
simbolo 03.04.2017, 15:13
quelle
1

Da es nicht möglich ist, eine Safari anzuzeigen, wird das native Banner angezeigt, wenn es nach dem Laden der Seite eingefügt wird (wie oben getestet und bestätigt nach Apfel), ist die einzige praktikable Lösung, den nativen Smartbanner nicht zu verwenden, sondern einen eigenen zu erstellen.

Zum Beispiel mit einem Javascript-Plugin wie das

    
Koesper 27.08.2015 11:45
quelle