2012-08-09 4 views
1

Je développe le plugin web avec FireBreath et je suis assez novice dans ce domaine. J'ai jusqu'ici développé une classe d'API plugin assez complexe (avec des méthodes enregistrées, des propriétés et d'autres variables et structures). Je le charge sur la page en utilisant javascript et par défaut
object id = "plugin0" type = "application/x-myapp> tag
Mais maintenant j'ai besoin de rediriger vers une autre page html et j'ai besoin de garder tout mon rempli précédemment Avec le même modèle avec balise OBJECT, je pense avoir créé une autre instance de mon plugin, car toutes les variables étaient indéfinies, donc ma question est de savoir comment garder une instance de plugin et la rendre accessible dans plusieurs pages html?
J'ai une page où je stocke des variables et des pointeurs à l'intérieur de la classe d'API de plugin avec l'écran de connexion et après la connexion je dois rediriger vers une autre page et être capable d'accéder aux variables et aux pointeurs précédemment remplisFireBreath plugin à travers plusieurs pages

Répondre

3

Vous ne pouvez pas. Les plugins sont spécifiques à une seule page. tance sera détruit avec l'étiquette d'objet qui le contient est détruit - période. Il n'y a pas d'exceptions à cette règle.

Cela dit, il y a quelques options que vous pouvez essayer pour ce que vous faites:

1) Ressaisissez votre site pour être AJAX et javascript afin que tous les conduits pages sont en fait la même page avec différents hashtags, etc. Voir http://backbonejs.org/ pour un cadre qui aide avec ceci. Du point de vue du plugin, c'est certainement la solution la plus simple, mais cela peut nécessiter de réécrire l'intégralité de votre site web, ce qui pourrait poser problème.

2) Maintenez l'état en utilisant votre application Web et retransmettez les données dans le plugin sur chaque page. Vous pouvez le faire via des balises param ou des appels de fonction une fois que le plugin instancie

3) Créez une sorte de "session" avec votre plugin avec les données stockées dans l'espace mémoire global; vous pourriez alors reprendre la "session" sur une autre page. Par exemple:

if (!plugin.restoreSession("userid")) { 
    plugin.createSession("userid"); 
} 

Dans cet exemple, createSession et restoreSession seront utilisés pour initialiser ou reprendre une session donnée. Le défi avec ceci est que vous n'avez aucune idée du nombre d'onglets ou de pages qui sont ouverts en utilisant votre plugin, ainsi vous pourriez facilement avoir des collisions entre les pages accédant toutes aux mêmes données globales. En outre, quelqu'un pourrait créer une autre page Web qui utilise votre plugin et restaure une session et modifie ou accède aux données, c'est donc un risque de sécurité. Vous pouvez atténuer cela en stockant un nom de domaine avec les sessions et en autorisant seulement l'accès à la session à partir du même domaine, mais ... eh bien, maintenant vous avez simplement recréé des cookies. En outre, le navigateur ne garantit pas réellement combien de temps votre module de plugin sera chargé; il pourrait le décharger sur vous à n'importe quel moment qu'il n'y a aucune instance active (entre les demandes de page). En pratique, il est beaucoup plus probable que le module plugin ne soit pas déchargé avant la fermeture du navigateur, ce qui signifie que les données stockées dans la mémoire globale de votre plugin ne seront pas libérées et continueront à occuper de la mémoire jusqu'à la fermeture du navigateur.

4) Créez une extension de navigateur qui utilise votre plugin et fonctionne sur plusieurs demandes de pages. Je n'ai aucune idée de comment faire cela, mais les choses que j'ai entendues des autres me portent à croire que c'est possible. Gardez à l'esprit que vous devez en créer un pour chaque navigateur pris en charge et ce n'est probablement pas possible sur IE; probablement seulement sur Firefox/Chrome. Depuis que vous êtes nouveau sur StackOverflow, permettez-moi de vous souhaiter la bienvenue sur le site et de vous rappeler chaque fois que vous postez une question (pas seulement celle-ci!) Pour améliorer les réponses utiles et essayer de toujours les corriger.

+0

Salut et merci pour votre réponse utile et complexe. Quelque part dans mon esprit, je pensais qu'il y avait une possibilité que je ne puisse pas faire cela. Je pense que je vais aller 1) chemin depuis mon site se compose de seulement 2 pages jusqu'à présent. – Raadush

+0

Gardez à l'esprit que si vous utilisez CSS pour afficher le plugin: none ou visibility: hidden vous le ferez décharger; la solution la plus simple est généralement de la positionner en absolu et de le faire 1px par 1px quand il devrait être caché – taxilian

Questions connexes