Question

J'ai une page qui a des écouteurs d'événement pour l'état du réseau.Lorsque le réseau est "hors ligne" je veux désactiver toutes les croix domaine des liens pour aller en mode hors ligne.J'ai essayé d'utiliser .preventDefault(), toutefois, lorsque l'application est de nouveau en ligne j'ai besoin de ré-activer les liens.

Les Écouteurs D'Événement

//check network status
if(!navigator.onLine) { 
    offlineLinks(); //Offline mode function
}
//add event listeners for network status
window.addEventListener('offline', function(e) {
    offlineLinks(); //Offline mode function
}, false);
window.addEventListener('online', function(e) {
    //need to re-enable links/Online mode
}, false);
window.addEventListener('error', function(e) {
    alert('Error fetching manifest: there is a good chance we are offline.');
    offlineLinks(); //Offline mode function
});

Fonction à la "dé-liaison"

function offlineLinks() {
    $('a[href^="http"]').click(function(e) {
        e.preventDefault();
        $('#offline-dialog').dialog({
            modal: true,
            buttons: {
                Ok: function() {
                    $(this).dialog('close');
                }
            }
        });
    });
}

Je suis à la recherche d'une solution évolutive qui ne cause pas de lag si il y a un nombre important de liens sur la page.Est-il une solution simple pour inverser la .preventDefault() appel ou une meilleure façon d'accomplir cette tâche?

Solutions Possibles


Mes premières pensées ont été soit stocker un tableau de la href valeurs et ensuite de supprimer/ajouter.J'ai été jouer avec le HTML5 stockage à l'aide de webdb's j'ai pu créer une base de données pour dynamiquement et tirez le hrefs onclick...cependant, je ne suis pas sûr si c'est la meilleure solution pour cela.

Était-ce utile?

La solution

Vous semblez être à l'aide de jQuery, au moins pour le lien gestionnaire de la partie.

La chose à comprendre, c'est que $.cliquez sur(gestionnaire) est juste un raccourci pour .bind('click', gestionnaire).Si vous définissez le gestionnaire d'ailleurs, vous pouvez également séparer plus tard, comme ceci:

var handler = function(event) { 
  event.preventDefault();
  console.log("the links, they do nothing!");
}

// when you want the external links to be inactive.
// you could use .click(handler) here too, it's the same.
$('a[href^="http"]').bind('click', handler);

// when you want them back
$('a[href^="http"]').unbind('click', handler);

Par la voie, href^="http" est un peu fragile, si vous ne voulez que cela se produise à des liens externes.Liens internes pourrait commencer par "http", et des liens externes pourrait commencer avec d'autres protocoles comme le "ftp".Mieux de donner de tels liens de leur propre classe, comme Wikipédia le fait avec les "externes".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top