J'essayais de faire une page utilisateur.js à / Messages sur Facebook, mais on dirait que GreasemonKey ne remarque pas de notification lorsque la navigation passe de / sur / messages. Cela se produit également dans d'autres pages internes. Je pensais d'abord que c'était causé par la navigation d'Ajax, mais l'URL change (pas la partie de hachage), c'est donc une navigation normale, non?
Ceci est une page de test que j'ai utilisée: P>
// ==UserScript== // @name Test // @namespace none // @description just an alert when page changes // @include http*://www.facebook.com/* // ==/UserScript== alert(location.href);
3 Réponses :
Pour les navigateurs qui le supportent, y compris Firefox 4+, Facebook tire parti de l'API Historique HTML5. Cette API permet de modifier l'emplacement à l'aide de la méthode Si vous vouliez capturer ce changement, vous devez proxy le history.pushstate () code> bien qu'aucune navigation ne se produise réellement. Bien que la page puisse sembler avoir changé, tout ce qui est arrivé est un appel AJAX en coulisses qui change la majeure partie du contenu.
Poussette de pousstite () Code> Méthode avec votre propre fonction: P>
(function (old) {
window.history.pushState = function () {
old.apply(window.history, arguments);
alert(window.location.href);
}
})(window.history.pushState);
Je ne pense pas que vous devez utiliser un proxy - ne pouviez pas simplement gérer la fenêtre window.onpopstate code>?
Onppopstate Code> Ne détecte pas lorsque la pousstite est appelée à de nouvelles pages, juste lorsque vous utilisez les boutons avant ou arrière (ou appels d'API avant et arrière).
Le problème avec cette approche est que les nouveaux éléments de page n'ont pas nécessairement été chargés après Old.Apply (Windows.Histoire, Arguments) CODE> Retours, il peut donc ne pas être prêt pour votre script à traiter.
@ Andy-e Pour une raison quelconque, cela ne fonctionne pas sur les scripts utilisateur pour moi - la fonction n'est pas mutée. Est-il possible que Twitter préserve une copie de l'objet d'origine dans une fermeture? J'utilise cette solution de contournement en ce moment mais il est sous-optimal car il court trop de fois GITUB.COM/GIUSEPPEG/REFINE-TWITTER-LITE/BLOB/...
Une autre approche consiste à accrocher Notez que si les utilisateurs utilisent les boutons Forward / Back, vous risquez d'obtenir des événements «DomnodeIsersed» pour le contenu réinséré à la page que vous avez déjà modifiée avec votre script, vous devez donc vous assurer de vérifier si vous changez. Vous apportez normalement que la page a déjà été faite, pour éviter d'insérer des commandes en double ou autre. P> P> domnodeinserted code> pour la page et à exécuter lorsque le chemin correspond à
/ messages code> après insertion:
+1 à @Rampion Suggestions. Je voulais effectuer une simple redirection cependant et la recherche d'éléments sur la page n'était pas très utile car je ne veux pas rediriger l'utilisateur sans assistance.
De toute façon, j'ai utilisé ce code pour installer un auditeur qui serait redirigé si nécessaire sur l'utilisateur en cliquant sur l'utilisateur. Sur un lien avec particulier fonctionne assez soigné. Je devais figurer correct troisième AddeventListener param param param par exemple que mon auditeur est exécuté avant tout autre. P> pour script complet, regardez https://gèreyfork.org/fr/scripts/8176-scitch-a-mobile-version-on-facebook-video-page p> Je n'ai pu trouver aucun moyen de détecter de manière fiable les modifications de l'URL indépendamment de la méthode utilisée par le site Web pour modifier cette URL. @ Andy-e approche semble génial mais ne travaillait pas pour moi pour une raison quelconque. Peut-être que je n'ai pas pu faire de script href code>: p>
@grant code> correctement. P> p>
Cette autre question peut être pertinente. Stackoverflow.com/Questtions/3522090/... < / a>