J'ai lu toute la documentation sur les balises de script, mais je ne trouve pas comment écrire une balise de script dans la page HTML AMP, même si je sais que "la balise de script est interdite, sauf si le type est application/ld+json
". Ils ont des composants d'exécution AMP et des composants étendus par défaut qui contiennent une fiche spécifique pour différents composants.
Je ne pouvais pas trouver quelle est la forme spécifique pour les js personnalisés en AMP HTML. Voici ma balise script:
<script src="https://arifkarim.com/widget/layouts/global/js/legaltext.js"></script>
Le but de AMP est de ne permettre qu’à un sous-ensemble de technologies Web d’empêcher la lenteur de votre page.
Javascript est souvent la cause de la lenteur des sites Web et les pages AMP ne les autorisent pas (à l'exception des scripts AMP eux-mêmes), bien qu'ils aient tenté de combler le vide laissé par les composants d'amplis spécialement écrits pour ne pas être lents.
Donc, si vous voulez utiliser Javascript, vous avez plusieurs choix:
Les tags <script>
ne sont généralement pas autorisés dans AMP. Il existe une poignée de fichiers javascript externes, construits dans le cadre du projet AMP, qui sont autorisés et même requis dans certains cas. En dehors de ceux-ci, javascript n'est pas autorisé. Les balises de script personnalisées ne sont pas possibles avec AMP.
Pour utiliser le code Javascript personnalisé dans la page AMP, vous devez l'écrire dans un fichier Javascript (par exemple: amp-iframe-0.1.js ). Ajoutez ensuite ce script à <head>
: <script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js"></script>
Le javascript personnalisé peut être appelé en utilisant amp-iframe. Par exemple.:
<amp-iframe width=300 height=300
sandbox="allow-scripts allow-same-Origin allow-popups allow-popups-to-escape-sandbox"
layout="responsive"
frameborder="0"
src="https://www.google.com/maps/embed/v1/place?key=AIzaSyDG9YXIhKBhqclZizcSzJ0ROiE0qgVfwzI&q=Alameda,%20CA">
</amp-iframe>
Ok, j'ai eu le même problème et le meilleur moyen pour moi est d'utiliser iframe, quel ampli sera rendu de façon asynchrone. Cela signifie que vous pouvez le résoudre par exemple comme ceci:
API côté serveur: demande GET (par exemple / api/frames/my-js-script-app). Après l'appel, vous obtiendrez le code suivant:
<html>
<head>
<script defer src="your_js_scripts"></script>
</head>
<body>
<!-- html code which using your javascript, if exists... --!>
</body>
</html>
Ajouter une bibliothèque d'images AMP à votre application:
<head>
...
<script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js"></script>
</head>
Maintenant, vous pouvez utiliser dans votre corps ceci:
<amp-iframe width=500 height=300
sandbox="allow-scripts allow-same-Origin"
layout="responsive"
frameborder="0"
src="https://localhost/api/frames/my-js-script-app">
</amp-iframe>
Soyez prudent avec la création de l'API sur votre serveur. Le cadre AMP a besoin de https communication - cela signifie quelque chose comme ceci: https: // localhost/api/frames/my-js-script-app
Maintenant, amp rendra votre application de manière asynchrone et tout le monde sera content :-))
J'espère que ça aide!