J'essaye d'écrire un script Greasemonkey pour Facebook et j'ai des problèmes avec le chargement génial de page/contenu qu'ils font (je ne comprends pas tout à fait - beaucoup des liens sont en fait juste en train de changer le GET, mais je pense qu'ils font une sorte de redirection de serveur pour que l'URL ressemble au navigateur aussi?). Essentiellement, le seul test requis est de mettre un GM_log()
seul dans le script. Si vous cliquez sur Facebook, même avec facebook.com/* comme modèle, il n'est souvent pas exécuté. Y a-t-il quelque chose que je puisse faire, ou est-ce que l'idée d'un "chargement de page" est corrigée dans Greasemonkey, et FB "l'empêche" de fonctionner en utilisant une seule URL?Le script Greasemonkey n'est pas exécuté lorsque le chargement de contenu inhabituel est utilisé
Si j'essaie de faire un peu de manipulation de contenu de base comme ceci:
GM.log("starting");
var GM_FB=new Object;
GM_FB.birthdays = document.evaluate("//div[@class='UIUpcoming_Item']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (i = GM_FB.birthdays.snapshotLength - 1; i >= 0; i--) {
if (GM_FB.birthdayRegex.test(GM_FB.birthdays.snapshotItem(i).innerHTML)) {
GM_FB.birthdays.snapshotItem(i).setAttribute('style','font-weight: bold; background: #fffe88');
}
}
Le résultat est que, parfois, seule une actualisation de page de manuel faire fonctionner. Tirer sur la console Firebug et forcer le code à fonctionner fonctionne bien. Notez que ceci n'est pas dû au chargement tardif de certaines parties du DOM: j'ai ajouté du code plus tard pour attendre les éléments pertinents et, le plus important étant que le message ne soit jamais enregistré pour certaines transitions. Par exemple, lorsque je passe de Messages à Fil de nouvelles et de retour.
La plupart des choses que j'ai vérifié regardé comme des liens normaux, mais ils ajouter des choses aux paramètres GET URL plutôt que le changement (il reste toujours comme facebook.com/?blahfoo). Pour une raison quelconque, je ne semble pas obtenir une autre exécution de GM quand cela arrive. –
A-t-il un '#' sur l'URL? L'URL de la page peut changer mais ne rechargera pas la page. Il n'y a pas d'autre moyen de le faire en exécutant des scripts à partir d'un site Web. – BrunoLM
Une redirection côté serveur empêcherait-elle GM de s'exécuter dans ce cas? par exemple. charger FB frais, Messages href est facebook.com/?sk=messages mais quand vous cliquez sur il va à facebook.com/#!/sk=messages et GM ne fonctionne pas. Cela expliquerait une partie du problème. Bien sûr, c'est aussi jouer avec mon setTimeout (et je ne fais pas le nom de la fonction comme erreur de chaîne) pour vérifier l'arrivée des éléments. Bit d'un site difficile à écrire. –