|
| Demande aux spécialistes du userscript MMHK. | |
| | Auteur | Message |
---|
Jactari
| Sujet: Demande aux spécialistes du userscript MMHK. Ven 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 ? | |
| | | Willpower
| Sujet: Re: Demande aux spécialistes du userscript MMHK. Ven 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. | |
| | | Jactari
| Sujet: Re: Demande aux spécialistes du userscript MMHK. Ven 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. | |
| | | Willpower
| Sujet: Re: Demande aux spécialistes du userscript MMHK. Ven 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à. 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 | |
| | | Willpower
| Sujet: Re: Demande aux spécialistes du userscript MMHK. Ven 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) | |
| | | amroth
| Sujet: Re: Demande aux spécialistes du userscript MMHK. Mar 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. | |
| | | Contenu sponsorisé
| Sujet: Re: Demande aux spécialistes du userscript MMHK. | |
| |
| | | | Demande aux spécialistes du userscript MMHK. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| Franco Bowl - Trophée Enroth |
|
Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|