2017-06-19 3 views
0

Ceci est pour un userdescript greasemonkey dans Firefox (Waterfox).Comment créer une barre d'outils persistante?

Nous avons une base de données de cloud (CRM Dynamics) qui, pour charger un enregistrement particulier, le navigateur effectue trois chargements de page avec différents paramètres et urls.

Je veux chercher les paramètres d'une de ces charges de page (celui qui charge au milieu) et l'afficher sur la page quelque part pour référence. J'ai donc créé un div qui se trouve juste en dessous du ruban principal. Le problème est que, puisque la page se charge trois fois, cela signifie que le script se charge trois fois, donc j'utilise GM_getValue et GM_setValue pour stocker et récupérer des données sur les pageloads suivants.

Cependant, il est pire que cela.

  • Les articles DOM de la page ne peuvent être ajoutés/modifiés que sur le premier chargement - cette charge charge tout le code HTML.
  • La valeur dont j'ai besoin se trouve dans les paramètres de requête de la deuxième charge - qui ne fait que remplir les données de la première page.
  • Il n'y a aucun moyen d'obtenir la valeur param de la requête sur la barre d'outils div sur la deuxième ou la troisième page chargement; et je n'ai pas la valeur jusqu'à la deuxième charge. Je pense que les deux derniers chargements de page sont seulement pour passer des paramètres entre les charges de page - il n'y a pas de page DOM dans ces charges.
  • Le script utilisateur se déclenche sur chaque chargement de page.
  • Le troisième pageload je peux effectuer des actions, mais ne peut pas interagir avec le code HTML (il n'y a pas dans ce pageload), même si le HTML est dans la fenêtre.

Y at-il un moyen de placer ma barre d'outils-div dans le DOM du navigateur au lieu du DOM de la page? De cette façon, il pourrait y avoir un endroit où chaque chargement de page a accès. Qu'est-ce que je veux faire est en quelque sorte obtenir le premier chargement de la page pour faire quelque chose après le troisième chargement de la page est terminée.

+0

Je peux charger jquery dans l'utilisateur, pas de problème. Je posterais un exemple, mais je ne peux pas trouver un moyen de le rendre compréhensible sans accès à notre crm. – bgmCoder

+0

La parodie semble intéressante, mais il n'y a aucun moyen pour moi de connaître l'url + les paramètres nécessaires pour usurper; Si je savais que ceux-ci sur la première page de chargement, je n'aurais pas besoin de spoof du tout. – bgmCoder

+1

La question est trop large, vous devez la réduire à un MCVE. En général, vous pouvez faire ce que vous voulez en utilisant 'postMessage', ou' localStorage' (même domaine seulement), ou 'GM_setValue' pour communiquer entre les instances de script. S'il s'agit de trames de même domaine (i), vous disposez d'options supplémentaires. –

Répondre

0

Compris! Le commentaire de Brock Adam m'a permis de trouver une solution. Merci, Brock.

Je figure le code à exécuter sur la première page charge et assurez-vous qu'il le fait:

$(window).on('load', function() { 
    console.log('updating itemid'); 
    $('#myd').text(GM_getValue("itemid")); 
}); 

L'événement se déclenche window.load sur chaque chargement de page, donc quand les dernières courses de PageLoad, il déclenche cette charge événement et met à jour le texte div. Apparemment, cet événement ne se déclenche qu'après la fin de la troisième pageload.