Le Pacte d'Enroth
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Le Pacte d'Enroth

Forum de l'Empire d'Enroth, alliance multiplateformes
 
AccueilRechercherDernières imagesS'enregistrerConnexion
-39%
Le deal à ne pas rater :
Ordinateur portable ASUS Chromebook Vibe CX34 Flip
399 € 649 €
Voir le deal

 

 Demande aux spécialistes du userscript MMHK.

Aller en bas 
3 participants
AuteurMessage
Jactari

Jactari



Demande aux spécialistes du userscript MMHK. Empty
MessageSujet: Demande aux spécialistes du userscript MMHK.   Demande aux spécialistes du userscript MMHK. Icon_minitimeVen 30 Sep 2011 - 17:22

Salut.

Comme il y a des experts ici, peut-être l'un d'entre eux pourra-t-il me débloquer.
Je suis en train de faire un script minimal permettant de lier le jeu au simulateur lors de l'ouverture de la fenêtre de préparation de combat.
Mais le script semble planter à la création de l'élément image (icône bouton) à ajouter dans la fenêtre en question.
J'ai regardé des scripts existants et fonctionnels et je ne comprends pas ce que je fais de travers.

Code:
// ==UserScript==
...
var capsule = (function() {
...
function permalien(frame) {
...
};
...
function injectAfter(S,A) {
   return function() {
      var arg = Array.prototype.slice.call(arguments, 0);
      arg.unshift(S.apply(this,arguments));
      return A.apply(this, arg);
   };
};

function init() {
   H = unsafeWindow.HOMMK;
...
   function ajout_bouton(r) {
      var frame = this;
      var n;
      var c = frame.getChildElement('Defender');
      if (c) {
         n = document.getElementById('permalien_jactari');
         if (n) n.parentNode.removeChild(n);
         n = document.createElement('a');
         n.id = 'permalien_jactari';
         n.href = url_combat;
         n.title = 'simulation';
         n.style = 'position: absolute; top: 60px; left: 363px; width: 16px; height: 17px; background-image: url(' + base_url + 'images/icone_combat.png); z-index: 1000;';
         n.addEventListener('click', function(E) { return n.href = permalien(frame); }, true);
         c.appendChild(n);
      };
      return r;
   };
   H.BattlePrepFrame.prototype.display = injectAfter(H.BattlePrepFrame.prototype.display, ajout_bouton);
};

return {init:init};

}());

document.addEventListener('DOMContentLoaded', capsule.init, true);

Une idée ?
Revenir en haut Aller en bas
Willpower

Willpower



Demande aux spécialistes du userscript MMHK. Empty
MessageSujet: Re: Demande aux spécialistes du userscript MMHK.   Demande aux spécialistes du userscript MMHK. Icon_minitimeVen 30 Sep 2011 - 18:03

Je n'ai pas la solution à ton problème mais qqes remarques :

1) quand tu postes un bout de code, en général on va tenter de l'exécuter pour trouver tes erreurs, donc évite les "..." ou place un commentaire devant.
2) "unsafeWindow" n'est pas toujours définit (je n'ai pas étudié à quel moment il était là ou non, mais vaut mieux le tester et utiliser "window" s'il n'existe pas.
3) injectAfter, ça c'est de la fonction obscure, j'ai du la relire 3 fois pour la comprendre, ça mérite un GG.

Sinon après qqes modification, j'arrive à exécuter ton code qui rajoute un morceau de lien (partiellement caché à cause de l'endroit où tu le places) :


Code:
var capsule = (function () {

    function permalien(frame) {

    };

    function injectAfter(S, A) {
        return function () {
            var arg = Array.prototype.slice.call(arguments, 0);
            arg.unshift(S.apply(this, arguments));
            return A.apply(this, arg);
        };
    };

    function init() {
        H = window.HOMMK;

        function ajout_bouton(r) {
            var frame = this;
            var n;
         var base_url = 'http://2img.net/i/fa/i/smiles/icon_redface.gif';
            var c = frame.getChildElement('Defender');
            if (c) {
                n = document.getElementById('permalien_jactari');
                if (n) n.parentNode.removeChild(n);
                n = document.createElement('a');
                n.id = 'permalien_jactari';
                n.href = "/lol";
                n.title = 'simulation';
                n.style = 'position: absolute; top: 60px; left: 363px; width: 16px; height: 17px; background-image: url(' + base_url + '); z-index: 1000;';
                n.addEventListener('click', function (E) {
                    return n.href = permalien(frame);
                }, true);
            n.innerHTML = "lien jactari";
                c.appendChild(n);
            };
            return r;
        };
        H.BattlePrepFrame.prototype.display = injectAfter(H.BattlePrepFrame.prototype.display, ajout_bouton);
    };

    return {
        init: init
    };

}());

document.addEventListener('DOMContentLoaded', capsule.init, true);
capsule.init();

notes:
- ton lien n'avait pas de contenu donc n'apparaissait pas, j'ai donc rajouté un "innerHTML".
- tes variables "url_combat" et "base_url" n'existait pas, donc j'ai mis du contenu bidon pour les remplacer.
Revenir en haut Aller en bas
http://www.hommk.net/
Jactari

Jactari



Demande aux spécialistes du userscript MMHK. Empty
MessageSujet: Re: Demande aux spécialistes du userscript MMHK.   Demande aux spécialistes du userscript MMHK. Icon_minitimeVen 30 Sep 2011 - 18:53

Pour une raison qui m'échappe, le n.style = ne passe pas. (Afficher une image à la place du lien en utilisant le CSS.)
J'ai résolu le problème en ajoutant un élément style à l'élément head.

Si j'utilise window, rien ne se passe.
Il doit exister des moyens de contourner cela, mais débutant en GreaseMonkey, je me contenterai de unsafeWindow pour l'instant, tout en sachant que c'est mal.

injectAfter() n'est pas de moi, mais d'un autre développeur de script.
Je ne sais pas comment faire pour personnaliser la fonction d'ouverture de fenêtre de préparation de combat dans MMHK sans cela.

Il y avait également de nombreux problèmes avec ma fonction permalien (non détaillée ici), qui empêchait le lien sur le bouton de se compléter avec toutes les informations du combat ; ils sont à priori résolus.
Et je pourrai donc sous peu publier la nouvelle version de mon permalien de combat avec un script utilisateur idoine.

Désolé pour les points de suspension et merci pour l'essai.
Revenir en haut Aller en bas
Willpower

Willpower



Demande aux spécialistes du userscript MMHK. Empty
MessageSujet: Re: Demande aux spécialistes du userscript MMHK.   Demande aux spécialistes du userscript MMHK. Icon_minitimeVen 30 Sep 2011 - 19:28

Jactari a écrit:

Je ne sais pas comment faire pour personnaliser la fonction d'ouverture de fenêtre de préparation de combat dans MMHK sans cela.
.

Code:
// sauvergarde de la fonction originale
var save = H.BattlePrepFrame.prototype.display;

// ecrassement de la fonction
H.BattlePrepFrame.prototype.display = function(){
  // exécution de la fonction originale
  var retour = save.apply(this,arguments);
  // exécution de ton code personnalisé
  var frame = this;
  // ...

  // renvoie la valeur de la fonction originale
  return retour;
};

mais ta fonction injectAfter est totalement identique, donc garde-là. Wink
sinon y'a aussi moyen d'intercepter la fenetre en checkant les frames plusieurs fois par seconde, mais c'est moins propre.

et zut, tu vas faire diminuer l’intérêt de mon script, vivement que je ponde mes cartes du monde pour booster mon site. :-D
Revenir en haut Aller en bas
http://www.hommk.net/
Willpower

Willpower



Demande aux spécialistes du userscript MMHK. Empty
MessageSujet: Re: Demande aux spécialistes du userscript MMHK.   Demande aux spécialistes du userscript MMHK. Icon_minitimeVen 30 Sep 2011 - 23:06

Jactari a écrit:
Si j'utilise window, rien ne se passe.

Il me semble que sous chome il faut utilise "window". (sans certitude)
Revenir en haut Aller en bas
http://www.hommk.net/
amroth

amroth



Demande aux spécialistes du userscript MMHK. Empty
MessageSujet: Re: Demande aux spécialistes du userscript MMHK.   Demande aux spécialistes du userscript MMHK. Icon_minitimeMar 4 Oct 2011 - 17:43

Jactari a écrit:
Pour une raison qui m'échappe, le n.style = ne passe pas. (Afficher une image à la place du lien en utilisant le CSS.)
J'ai résolu le problème en ajoutant un élément style à l'élément head.
L'attribut style dans le DOM n'est pas une chaîne de caractères, c'est un objet. Tu auras sûrement plus de succès avec quelque chose qui ressemble à ça:
Code:
n.style.cssText = 'position: absolute; top: 60px; left: 363px; width: 16px; height: 17px; background-image: url(' + base_url + '); z-index: 1000;';
mais d'habitude, je fais plutôt ça:
Code:

n.style.position = 'absolute';
n.style.top = '60px';
n.style.left = '363px';
n.style.width = '16px';
n.style.height = '17px';
n.style.backgroundImage = 'url(' + base_url + ')';
n.style.zIndex = 1000;
Willpower a écrit:

2) "unsafeWindow" n'est pas toujours définit (je n'ai pas étudié à quel moment il était là ou non, mais vaut mieux le tester et utiliser "window" s'il n'existe pas.
Un script Greasemonkey ne s'exécute pas dans le même environnement que la page web, de façon à empêcher un site web mal intentionné d'exécuter des choses avec les privilèges de GM (i.e. accès complet au réseau et à certaines choses en local, selon la version).

unsafeWindow est défini dans le plugin firefox comme les fonctions GM_*: dans l'environnement greasemonkey. Dans cet environnement, on a aussi accès au DOM et aux événements de la page web via l'objet window, mais pas au reste (variables javascript, par exemple). Ca évite que le script et la page web se polluent mutuellement. unsafeWindow permet d'accéder à l'objet window d'origine, utilisé par la page web.

Le script GM installé en local s'exécute dans greasemonkey (et donc peut utiliser unsafeWindow mais pas window), mais évidemment, les scripts injectés dans la page web en modifiant le dom (via addElement('script') par exemple) sont exécutés dans la page web et pas dans greasemonkey.

Enfin, les variables unsafeWindow et GM_* ne sont pas définis dans chrome ou epiphany, ce qui force à respecter des règles élémentaires de sécurité: il faut passer par la modification du DOM ou des échanges de message.
Revenir en haut Aller en bas
Contenu sponsorisé





Demande aux spécialistes du userscript MMHK. Empty
MessageSujet: Re: Demande aux spécialistes du userscript MMHK.   Demande aux spécialistes du userscript MMHK. Icon_minitime

Revenir en haut Aller en bas
 
Demande aux spécialistes du userscript MMHK.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» MMHK en Amérique
» MMHK will die slowly
» [Script] MMHK-Plus
» MMHK down depuis longtemps, non?
» MMHK autour du monde.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Pacte d'Enroth :: Autres jeux :: Archives des autres jeux :: Might and Magic : Heroes Kingdom :: Forums publics pour Might and Magic: Heroes Kingdoms :: Aide de jeu :: outils, scripts et sites externes-
Sauter vers: