tl;dr
J'utilise ajax pour récupérer de nouveaux contenus. Le contenu est récupéré et ajouté à la page. Cependant, les scripts ne sont pas "re-le-feu" à cause de leurs appels à l'extérieur de la ajaxed div
.
Les scripts de chargement et de feu sans aucun problème sur chargement initial de la page, mais pas quand je l'ajout de nouveau contenu via ajax. Je n'ai pas les erreurs de la console et il n'y a pas de questions si je visite l'URL directement.
Connexes:
- Forcer Script À Exécuter En AJAX Chargement de la Page - se Rapporte à l'un script spécifique. Je tiens à corriger (refire) tous les scripts, y compris les dynamiques de Cloudflare apps
- À l'aide de script jQuery Ajax dans Wordpress - Même que ci-dessus, cela ne se rapporte qu'à un seul script
- ajax du contenu chargé, le script ne s'exécute pas
Intro:
J'utilise Ajaxify Site WordPress(AWS) sur un site WordPress.
Le plugin vous permet de sélectionner un div
par son id et extrait du nouveau contenu à l'intérieur qu' div
à l'aide d'ajax
balisage html
<html>
<head></head>
<body>
<div id="page">
<header></header>
<main id="ajax"> <!-- This is what I want to ajaxify -->
<div class="container">
main page content
</div>
</main> <!-- end of ajaxfied content -->
<footer></footer>
</div> <!-- #page -->
</body>
</html>
Problème
Le plugin fonctionne et je reçois le contenu frais chargés et de style, mais il y a un problème. Certains de mes page des scripts et des appels de fonction sont en dehors de la div que j'utilise l'ajax. J'ai deux exemples
1 - Maçonnerie est chargé et a appelé à l' <footer>
<html>
<head></head>
<body>
<div id="page">
<header></header>
<main id="ajax"> <!-- This is what I want to ajaxify -->
<div class="container">
main page content
</div>
</main> <!-- end of ajaxfied content -->
<footer></footer> <!-- Masonry script is loaded and called here -->
</div> <!-- #page -->
</body>
</html>
2 - Google maps appel est dans l' <head>
<html>
<head></head> <!-- Google maps is called here -->
<body>
<div id="page">
<header></header>
<main id="ajax"> <!-- This is what I want to ajaxify -->
<div class="container">
main page content
</div>
</main> <!-- end of ajaxfied content -->
<footer></footer>
</div> <!-- #page -->
</body>
</html>
Ce sont juste deux exemples. Il en existe d'autres dans d'autres endroits. Comme vous pouvez le dire, ces scripts ne seront pas ré-disant que la seule chose qui recharge sur la page d' <main id="ajax">
. Alors que le nouveau contenu à l'intérieur d' <main>
est-il, certains des scripts nécessaires pour rendre correctement ne sont pas re-appelé et je me retrouve avec des éléments manquants / cassé mise en page.
Je ne suis pas le seul qui a été confronté à ce problème; un rapide coup d'oeil au plugin forum de support sur wordpress.org montre que ce problème est courant.
Note: je ne voudrais pas essayer de résoudre ce problème si le plugin a beaucoup d'autres questions. Il fonctionne pour moi, j'ai juste besoin de scripts pour le re-feu.
La réponse officielle est qu'il est possible de recharger / re-feu scripts en ajoutant la ligne suivante dans le plugin php les fichiers:
$.getScript(rootUrl + 'PATH TO SCRIPT');
Qui fonctionne. Il fonctionne bien. par exemple si j'ajoute
$.getScript(rootUrl + '/Assets/masonry.js');
Puis la maçonnerie les appels de la fonction re-déclenché quand la ajaxed contenu est récupéré, même si masonry.js est chargé à l'extérieur de la ajaxed div
Je vous renvoie à la plugin fichiers sur github pour plus de clarté sur ce que le correctif ne fait (je ne peux pas donner un sens à ce qui arrive quand les $.getScript
est utilisé)
En résumé
L'officiel correctif fonctionne très bien si vous avez 3-4 scripts qui doivent être re-tiré sur ajaxed de contenu.
Cela ne fonctionne pas pour mon objectif, car
- il est trop rigide et codée en dur
- Certains scripts sont ajoutés à la page dynamiquement via Cloudflare apps
Une solution possible pourrait impliquer l'ajout d'un événement imite l'élément déclencheur qui provoque les scripts de feu au bas de la ajaxed div
Question:
Comment puis-je la force de tous les scripts - y compris dynamiquement ajoutés ceux - re-le-feu lorsque seule une partie de la page a été rechargée via ajax?
Notes:
-
Je suis en train d'essayer d'éviter d'appeler des scripts un par un, en tant que nécessiterait la connaissance de leurs appels avant de la main. Je suis probablement la façon de parler-dessus de ma tête , mais...
Je suis en train d' imiter le chargement de la page et / ou le document de prêt des événements au cours de laquelle la plupart conditionnelle scripts sont tirés (corrigez-moi si je me trompe) - à la fin de l'
<main>
dans mon code html lorsque de nouvelles ajaxed contenu est ajouté, mais sans affecter le document lorsque la page est chargée via l'aide de l'url directement...ou toute autre méthode similaire. Juste pour un peu de contexte, voici une liste de certains des écouteurs d'événement sur la page alors que le plugin est désactivé. Je sais il y a des choses là-dedans que je n'aurai pas à déclencher. Je viens d'ajouter cette référence. Aussi, veuillez noter que ceci est un échantillon prélevé à partir de l'une des pages. d'autres pages qui peuvent différer.
DOMContentLoaded
beforeunload
blur
click
focus
focusin
focusout
hashchange
keydown
keyup
load
message
mousedown
mousemove
mouseout
mouseover
mouseup
mousewheel
orientationchange
readystatechange
resize
scroll
submit
touchscreen
unload