7
votes

Pourquoi Greasemonkey ne détecte pas certaines modifications de page sur Facebook?

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);


1 commentaires

Cette autre question peut être pertinente. Stackoverflow.com/Questtions/3522090/... < / a>


3 Réponses :


10
votes

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 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.

Si vous vouliez capturer ce changement, vous devez proxy le 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); 



4
votes

Une autre approche consiste à accrocher domnodeinserted pour la page et à exécuter lorsque le chemin correspond à / messages après insertion: xxx

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.


0 commentaires

0
votes

+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 href : xxx

fonctionne assez soigné. Je devais figurer correct troisième AddeventListener param param param par exemple que mon auditeur est exécuté avant tout autre.

pour script complet, regardez https://gèreyfork.org/fr/scripts/8176-scitch-a-mobile-version-on-facebook-video-page

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 @grant correctement.


0 commentaires