J'ai un widget qui contient un iframe. L'utilisateur peut configurer l'URL de cette iframe, mais si l'URL n'a pas pu être chargée (elle n'existe pas ou si l'utilisateur n'a pas accès à Internet), l'iframe doit basculer vers une page hors connexion par défaut. La question est, comment puis-je détecter si le iframe peut être chargé ou non? J'ai essayé de m'abonner à l'événement 'load', et, si cet événement n'est pas déclenché après un certain temps, je basculerai, mais cela ne fonctionne que dans Firefox, puisque IE et Chrome lancent l'évènement 'load' quand la page est introuvable. affiché.Détecter si le contenu iframe a été chargé avec succès
Répondre
De nos jours, les navigateurs ont une série de limitations de sécurité qui vous éloignent du contenu d'un iframe (s'il ne s'agit pas de votre domaine).
Si vous avez vraiment besoin de cette fonctionnalité, vous devez créer une page serveur qui doit fonctionner en tant que proxy, recevoir l'url en tant que paramètre, tester si elle est valide et rediriger ou afficher l'erreur page.
Si vous contrôlez le contenu de l'iframe (par exemple vous pouvez ajouter du code arbitraire à la page), vous pouvez essayer d'implémenter une fonction spéciale dans chacun d'entre eux, puis dans votre page, vous appelez cette fonction une erreur (via le gestionnaire window.onerror
) si la fonction appelée via eval échoue car la page n'a pas été chargée.
est ici un exemple de code: http://www.tek-tips.com/viewthread.cfm?qid=1114265&page=420
Après les feux de onload, vous pouvez récupérer le contenu de l'iframe pour voir si elle contient une page ou non utile. Vous devez malheureusement spécifier ce navigateur car ils affichent tous un message "page non trouvée" différent.
Pour plus d'informations, jetez un coup d'oeil ici à http://roneiv.wordpress.com/2008/01/18/get-the-content-of-an-iframe-in-javascript-crossbrowser-solution-for-both-ie-and-firefox/
Je pense que cela ne fonctionnera pas avec le contenu inter-domaines. – skinssay
Oui, vous avez raison, il ne vous permettra pas d'accéder au contenu inter-domaines. – Bitsplitter
J'ai trouvé le lien suivant via Google: http://wordpressapi.com/2010/01/28/check-iframes-loaded-completely-browser/
Je ne sais pas si elle résout le problème « Page introuvable ».
<script type="javascript">
var iframe = document.createElement("iframe");
iframe.src = "http://www.your_iframe.com/";
if (navigator.userAgent.indexOf("MSIE") > -1 && !window.opera) {
iframe.onreadystatechange = function(){
if (iframe.readyState == "complete"){
alert("Iframe is now loaded.");
}
};
} else {
iframe.onload = function(){
alert("Iframe is now loaded.");
};
}
</script>
Je n'ai pas essayé moi-même, donc je ne sais pas si cela fonctionne. Bonne chance!
Cela fonctionne à peu près comme l'événement onload, la condition (iframe.readyState == "complete") est vraie même si la page chargée est une page d'erreur IE. Donc, il me fait savoir quand la page a été chargée, mais pas si elle a été chargée avec succès. Merci quand même! – skinssay
Merci! J'ai récuré pour une solution de travail pendant 2 heures. Finalement! :) – MikeSchinkel
Ne fonctionne pas dans Chrome: http: //stackoverflow.com/questions/13952942/iframe-readystate-does-not-work-in-chrome – anmarti
Que diriez-vous de vérifier si l'URL est disponible et seulement alors établissant l'URL réelle de l'iframe? par exemple. avec JQuery
var url = "google.com"
var loading_url = "/empty.html"
document.getElementById("iframe").src = loading_url;
$.ajax({
url: url,
type: 'GET',
complete: function(e, xhr, settings){
if(e.status === 200){
document.getElementById("iframe").src = url;
}
}
});
Edit: Cela ne semble pas fonctionner inter-domaines, le code d'état est 0 dans ces cas.
Si vous contrôlez le contenu de l'iframe, l'iframe peut envoyer un message au parent.
parent.postMessage('iframeIsDone', '*');
Le rappel parent est à l'écoute du message.
var attachFuncEvent = "message";
var attachFunc = window.addEventListener ;
if (! window.addEventListener) {
attachFunc = window.attachEvent;
attachFuncEvent = "onmessage";
}
attachFunc(attachFuncEvent, function(event) {
if (event.data == 'iframeIsDone') { // iframe is done callback here
}
});
- 1. Vérifier si le fichier a été chargé avec succès
- 2. Déterminer lorsque le contenu d'un IFrame a chargé
- 3. Vérifier si le produit a été installé avec succès
- 4. vérifier si le script a été exécuté avec succès?
- 5. Détecter si le fichier a été importé
- 6. Comment détecter si le composant AxAcroPdf a chargé le PDF?
- 7. iOS: Comment détecter si un e-mail a été envoyé avec succès?
- 8. Comment savoir si le contenu iframe/popup est chargé/prêt?
- 9. Détecter si la connexion a été établie
- 10. Vérifiez si le contrôleur a déjà été chargé XCode
- 11. Comment détecter si l'élément a été masqué
- 12. Vérifier si le fichier javascript a été chargé
- 13. Vérifiez si le fichier a été chargé à l'aide .load()
- 14. comment détecter si tfilestream a été libéré?
- 15. Vérification si le contenu a été partagé sur Facebook
- 16. Détecter si un formulaire a été soumis avec PHP
- 17. détecter si l'élément a été touché pendant le contact
- 18. Vérifiez si le courrier a été envoyé avec succès dans VB.NET avec SMTPClient
- 19. Détecter si le contenu a été envoyé avant une ligne dans un fichier php dans codeigniter
- 20. Comment détecter si un iframe a été déplacé d'une URL à une autre
- 21. détecter si une nouvelle fenêtre ouverte est entièrement chargé avec le contenu qui y sont jointes
- 22. Détecter si le contenu d'un dossier a changé?
- 23. Test si jQueryTools a chargé
- 24. En utilisant yepnope, comment puis-je savoir si une ressource css a été chargée avec succès?
- 25. Vérifiez si un fichier a été inclus ou chargé
- 26. Test si jQueryUI a chargé
- 27. détecter si errorlog serveur SQL a été recyclé
- 28. Comment s'assurer qu'une page apparaît une fois que le iFrame sur la page a été chargé
- 29. Comment savoir si une instruction sql Update a été exécutée avec succès ou a échoué?
- 30. Vérifier si le contenu a déjà été envoyé en PHP
hey skinssay, avez-vous trouvé une solution sans utiliser de proxy? – brillout
non, je n'ai pas. J'ai fait une recherche plus approfondie et je pense que ce n'est pas possible :( – skinssay
selon http://stackoverflow.com/questions/3552355/prevent-iframe-this-webpage-is-not-available-error-from-displaying-on -website la propriété onerror est supportée par webkit mais je n'ai pas eu de chance pour que ça marche ... – brillout