Aller au contenu

Problèmes de prog. dans le plugin que j'améliore


Vow

Messages recommandés

Bonjour

 

Voilà, j'ai repris le plugin CookieCleaner pour faire quelquechose de plus intéractif.

J'ai entre autre changé le fichier d'accueil par un nouveau , mis l'ancien (qui permettait de configurer les blacklist/whitelist, j'ai même corrigé une belle erreur) en première option du bouton.

 

Le nouveau fichier permet de supprimer automatiquement les cookies de la blacklist.

Et j'aimerais également qu'il prévienne lorsque des cookies existants n'ont pas été ajoutés dans une des deux listes.

La détection fonctionne, mais je ne sais pas comment prévenir discrètement (c'est-à-dire autrement qu'un alert() ou un pop-up)

 

Voici les deux solutions que j'avais retenu (mais que je n'arrive pas à réaliser) :

 

* Solution 1 : afficher un calque en DIV sur l'onglet courant, en haut à gauche de l'écran

external.get_tab(%max_security_id,external.cur_sel).document.write ('<DIV NAME="CookieAlert" ID="CookieAlert" style="position: absolute; top: 1 px; left: '+(screen.width - 200)+' px; height: 50 px; width: 150 px; visibility: visible; font-family: arial, sans-serif; background-color: yellow; font-size: 18pt; color: black; "><CENTER>Cookies inconnus</CENTER> <DIV NAME="CookieAlertClose" style="position: absolute; top: -3 px; left: 120 px; visibility: inherit; font-family: arial, sans-serif; font-size: 14pt; "><A HREF="#" onclick="CookieAlert.style.visibility = \'hidden\'; " style="text-decoration:none; color: red; ">[X]</A></DIV></DIV>');

Sauf que ça efface tout le contenu de la page (pareil en faisant simplement "document.write").

J'ai également essayé en passant par :

elmnt=external.get_tab(%max_security_id,external.cur_sel).document.createElement('<DIV ....');
external.get_tab(%max_security_id,external.cur_sel).document.documentElement.appendChild(elmnt);

Mais là, rien ne se passe angelic.gif

J'ai même essayé simplement en enlevant les "external.get_tab(%max_security_id,external.cur_sel).", rien non plus...

 

 

* Solution 2 : lancer la fichier html de configuration

	  var reg_exp="\\";
  var chemin = external.m2_plugin_folder(%max_security_id,'CookieCleaner') + 'cookiecleaner.html';
  while(chemin.indexOf(reg_exp) > 0)
  {
		chemin = chemin.replace(reg_exp, "/");
  }

  var w=window.open('file://'+chemin,'_CookieCleaner_');

Je sais très bien que le "window.open" ne pourra pas fonctionner puisqu'on utilise du code compréhensible qu'en étant plugin Maxthon, comme "%max_security_id" et l'objet "external". Mais je n'ai pas trouvé de code permettant d'exécuter un fichier HTML du plugin...

 

 

 

Sinon, j'ai aussi un soucis : lorsque j'active le plugin au chargement des pages, je ne comprends pas pourquoi chaque nouvel onglet ouvert est activé (ça ne le fait pas à chaque fois, mais presque).

Pourtant je n'utilise pas "external.get_tab" ou autre fonction d'onglet dans mon code :

<script language="javascript">

function replacer(x){
return x.replace(/\r\n/g,'|').replace(/\|$/g,'').replace(/\|\|/g,'|').replace(/\|[^|]\|/g,'')
}

(function(){
var sid=%max_security_id
var p_nm='CookieCleaner'
var loc=external.m2_readIni(sid,p_nm,'plugin.ini','Settings','Folder','')
var locCheck=external.m2_readIni(sid,p_nm,'plugin.ini','Settings','AlwaysCheckCookieLocation','false')
var v_date=external.m2_readIni(sid,p_nm,'plugin.ini','Settings','ViewTheDate','false')
var stop=false
try{
external.m2_callerName(sid,p_nm)
//var w=window.open('about:blank','_blank')
var objShell=external.max_activex(sid,"Shell.Application")
var sfo=external.max_activex(sid,"Scripting.FileSystemObject")
var shell=external.max_activex(sid,"WScript.Shell")
}
catch(err){
alert('This function is for Maxthon 1.2.1 and higher!')
stop=true
}

if(loc==''||locCheck=='true') {
try{
	loc=shell.regRead('HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Cookies');
	external.m2_writeIni(sid,'CookieCleaner','plugin.ini','Settings','Folder',loc)
}
catch(err) { alert('Set your Cookie Folder!');stop=true }
}

if(!stop) 
{
var a,f,s=''

var bl_list=replacer(external.readFile(sid,p_nm,"blacklist.txt"))
if(bl_list=='') bl_list='lakdsjfoiajefjlskjeafij'

var wh_list=replacer(external.readFile(sid,p_nm,"whitelist.txt"))
if(wh_list=='') wh_list='lakdsjfoiajefjlskjeafij'

try{
	var f=new Enumerator(sfo.GetFolder(loc).files);
}
catch(err) { 
	alert('Can\'t open the cookie folder!');
	return
}

var bNewCookies = false

for(; !f.atEnd(); f.moveNext())
 {
	i=(f.item()+'').replace(/.*\\(.*?)/g,'$1')
	if(i.search(/\.txt/i)!=-1) 
{
  if (i.replace(/.*?@/,'').replace(/\.txt/,'').replace(/\[[0-9]\]/,'').search(bl_list)!=-1)
  {
		  try
	{
			  sfo.DeleteFile(loc+'\\'+i) //delete the file
		  }
		  catch(err) {
			  alert('Cannot delete \''+i+'\'');
		  }
  }
		else
  if (i.replace(/.*?@/,'').replace(/\.txt/,'').replace(/\[[0-9]\]/,'').search(wh_list)==-1)
		  // Recherche de nouveaux cookies (non référencés)
		  bNewCookies = true;

 }
 }

 if (bNewCookies == true)
// Cookies non référencés
 {

 }
}


}())
</script>

 

 

Si une humble âme généreuse pouvait m'aiguiller shocked.gif

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à tous

 

J'ai "enfin" trouvé comment afficher un "popup incrusté".

 

Ce code Javascript permet de remplacer le code HTML suivant :

<DIV NAME="CookieAlert" ID="CookieAlert" style="position: absolute; top: 1 px; left: '+(screen.width - 200)+' px; height: 50 px; width: 150 px; visibility: visible; font-family: arial, sans-serif; background-color: yellow; font-size: 18pt; color: black; "><CENTER>Cookies inconnus</CENTER> <DIV NAME="CookieAlertClose" style="position: absolute; top: -3 px; left: 120 px; visibility: inherit; font-family: arial, sans-serif; font-size: 14pt; "><A HREF="#" onclick="window.close()" style="text-decoration:none; color: red; ">[X]</A></DIV></DIV>

 

	  var elmnt = document.createElement("div");

  var attrib = document.createAttribute("name");
  attrib.nodeValue = "CookieAlert";
  elmnt.setAttributeNode(attrib);

  attrib = document.createAttribute("id");
  attrib.nodeValue = "CookieAlert";
  elmnt.setAttributeNode(attrib);

  elmnt.style.position = "absolute";
  elmnt.style.top = "1 px";
  elmnt.style.left = (screen.width - 200) +" px";
  elmnt.style.height = "50 px";
  elmnt.style.width = "150 px";
  elmnt.style.visibility = "visible";
  elmnt.style.fontFamily = "arial, sans-serif";
  elmnt.style.backgroundColor = "yellow";
  elmnt.style.fontSize = "18pt";
  elmnt.style.color = "black";

  var ssElm = document.createElement("center");
  var elmntTxt=document.createTextNode("Cookies inconnus");
  ssElm.appendChild(elmntTxt);
  elmnt.appendChild(ssElm);


  ssElm = document.createElement("div");
  attrib = document.createAttribute("name");
  attrib.nodeValue = "CookieAlertClose";
  ssElm.setAttributeNode(attrib);

  attrib = document.createAttribute("id");
  attrib.nodeValue = "CookieAlertClose";
  ssElm.setAttributeNode(attrib);

  ssElm.style.position = "absolute";
  ssElm.style.top = "-3 px";
  ssElm.style.left = "120 px";
  ssElm.style.visibility = "inherit";
  ssElm.style.fontSize = "14pt";

  var link = document.createElement("a");
  link.href = "#";
  link.style.color = "red";
  link.style.textDecoration = "none";
  link.onclick =  function() { CookieAlert.style.visibility = 'hidden'; return false; };
  elmntTxt=document.createTextNode("[X]");
  link.appendChild(elmntTxt);
  ssElm.appendChild(link);
  elmnt.appendChild(ssElm);

  document.body.appendChild(elmnt);
}
else
  if (document.getElementById('CookieAlert').style.visibility == "hidden")
	document.getElementById('CookieAlert').style.visibility = "visible";

 

 

 

Par contre, je n'ai toujours rien trouvé sur l'activation intempestive des nouveaux onglets. Vraiment personne n'a d'idée à ce sujet ?

Lien vers le commentaire
Partager sur d’autres sites

Salut Vow !

 

Pas facile de prendre ton travail en marche car je n'ai pas un aperçu global.

L'idéal serait que tu nous joignes ta version béta pour qu'on puisse parcourir ton code dans l'ensemble (tu peux joindre une archive à tes messages).

 

Je ne comprends pas bien ton problème d'onglet. Néanmoins, comme tu parles "d'onglet activé" ceci pourrait être à l'origine de ton "bug" :

var w=window.open('about:blank','_blank')

 

Tu lui demandes ici d'ouvrir un nouvel onglet. Cette ligne de code est-elle toujours présente dans ton plugin ?

Lien vers le commentaire
Partager sur d’autres sites

Salut Vow !

 

Pas facile de prendre ton travail en marche car je n'ai pas un aperçu global.

L'idéal serait que tu nous joignes ta version béta pour qu'on puisse parcourir ton code dans l'ensemble (tu peux joindre une archive à tes messages).

 

Je ne comprends pas bien ton problème d'onglet. Néanmoins, comme tu parles "d'onglet activé" ceci pourrait être à l'origine de ton "bug" :

var w=window.open('about:blank','_blank')

 

Tu lui demandes ici d'ouvrir un nouvel onglet. Cette ligne de code est-elle toujours présente dans ton plugin ?

Salut

Elle était en commentaire, elle l'est toujours, il me semble.

Je mets mon code en pièce jointe, mais il n'a pas vraiment changé par rapport à celui que j'avais affiché en premier message.

 

Merci pour ton aide en tout cas shocked.gif

 

[€DIT]

Finalement je mets tout le code en pièce jointe angelic.gif

[/€DIT]

CookieCleaner_1.2b_.zip

Lien vers le commentaire
Partager sur d’autres sites

OK, j'ai pigé ton problème angelic.gif En fait, quand tu ouvres une boite (par exemple "select cookie folder") il y a d'abord un nouvel onglet qui s'ouvre avant de laisser place à la boite, c'est bien ça ton problème ?

Je vais regarder ton code et je te tiens au courant si j'ai une réponse shocked.gif

Lien vers le commentaire
Partager sur d’autres sites

J'ai commencé à regarder ton code et déjà voilà mes premières remarques :

 

Fichier Setfolder.html :

 

var w=window.open('about:blank','_blank')

 

Tu demandes d'ouvrir un nouvel onglet ! Si tu supprimes cette ligne, tu n'ouvres pas un nouvel onglet. En revanche, l'onglet en cours est effacé. On va corriger ce comportement ensuite.

 

external.get_tab(sid,external.cur_sel).close()

 

Tu fermes l'onglet ouvert avec la 1ère ligne de code.

 

Donc pas de mystère, ces 2 lignes sont responsables de ton onglet qui apparait et disparait.

 

Cependant, avec ton code actuel, tu as besoin d'ouvrir ce nouvel onglet "vierge". Je vais regarder plus en profondeur dès que j'ai du temps pour corriger ce petit bug shocked.gif Je ne te promets rien !

Lien vers le commentaire
Partager sur d’autres sites

Probleme résolu : supprimes les 2 lignes de code précédentes dans le fichier "SetFolder.html" angelic.gif

var w=window.open('about:blank','_blank')

et

external.get_tab(sid,external.cur_sel).close()

 

Cliques sur ton plugin et choisis l'option "Set Cookie Folder", voilà, plus d'onglet ouvert !

 

Fais de même pour le reste du code et ca devrait le faire ! (fichier "CookieCleaner.html").

Par contre, ne touche pas au fichier "managelists.html" ;)

 

Bon, c'est provisoire mais ca marche, on regardera mieux ensuite !

 

Je suis désolé, je manque de temps dans l'immédiat shocked.gif

Lien vers le commentaire
Partager sur d’autres sites

Merci dixours pour ta dévotion angelic.gif

(j'espère que je ne serais pas dévoré pour te remercier ;) ...)

 

Donc, en fait, ce n'est pas trop ça mon soucis.

Je vais essayer de mieux expliquer.

 

J'ai désactivé l'option "Activer nouvel onglet", car je préfère rester sur la page courante lorsque je clique sur un lien vers un nouvelle fenêtre :

maxtabsjz1.jpg

 

Lorsque j'active le plugin au chargement de la page (voir copie d'écran ci-dessous), ça a pour effet de faire le contraire (sauf une fois de temps en temps où ça redevient normal) :

maxplugsrt5.jpg

 

Tu vois ce que je veux dire ?

 

Ca ne peut donc pas venir des autres fichiers HTML que celui indiqué dans la variable "FileName" de la section "General" de "plugin.ini".

Soit "cookiecleaner_clean.html" (le code que j'avais mis l'autre jour). C'est pour cela que je ne comprends d'où vient ce dysfonctionnement shocked.gif

Lien vers le commentaire
Partager sur d’autres sites

Ah OK ! Effectivement je n'avais pas pigé ton problème !

Et non, tu ne seras pas dévoré je te rassure, je suis plutôt du type : gentil nounours ;)

 

Bon, déjà, les 2 lignes de code ci-dessus peuvent être supprimées, ca améliore le comportement du plugin.

 

Maintenant que j'ai compris ton problème, je vais de nouveau regarder ton code angelic.gif

 

De tête (mais il faut que je vérifie), je crois que ton plugin fait appel à un fichier .js ("cookies.js" je crois) et de tête (décidément quelle mémoire !) il me semble que ce fichier contient des lignes qui pourraient être à l'origine de ton problème...

 

Dès que j'ai un peu de temps je regarde tout ça et je te tiens au courant de mes découvertes ! shocked.gif

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

Et merci gentil nounours cool.png

Désolé de ne répondre que maintenant.

 

En fait, mon fichier principal n'appelle pas du tout "cookies.js". Je n'avais pas encore trouvé (à l'époque) comment intégrer un JS dans un plugin Maxthon, de manière "intégrée".

Du coup, ça ne venait pas de ça. Donc j'y suis allé à la façon débutante : j'ai éliminé une grosse partie du code, puis j'ai testé. Tant que ça fonctionnait correctement, je remettais le code tel quel, petit à petit. J'en suis donc arrivé à trouver le responsable : il s'agirait de la fonction "external.readFile" :luv:

var bl_list=replacer(external.readFile(sid,p_nm,"blacklist.txt"))

 

Bref, je ne pense pas qu'il y ait de solution pour ça -^-

Vous avez peut-être des idées ?

Lien vers le commentaire
Partager sur d’autres sites

Salut ! A mon tour de m'excuser, j'ai manqué de temps ces derniers jours :luv:

 

Tu m'étonnes un peu en incriminant cette fonction. Je vais regarder plus en profondeur pour déterminer ce que fait exactement la fonction "replacer". Mais en tout cas, la fonction "readfile" n'y est pour rien....

 

J'essaie de te tenir au jus le plus vite possible, mais j'avoue qu'en ce moment je ne contrôle pas tout dans mon emploi du temps de ministre -^-

Lien vers le commentaire
Partager sur d’autres sites

Pas de soucis, il n'y a rien qui presse.

 

Donc... d'après mes tests, ça vient bien readFile justement.

En plus la fonction "replacer" ne fait rien de spécial :

function replacer(x)
{
return x.replace(/\r\n/g,'|').replace(/\|$/g,'').replace(/\|\|/g,'|').replace(/\|[^|]\|/g,'')
}

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Salut

Pas tout suivi mais pour ca :

* Solution 2 : lancer la fichier html de configuration

.............

Je sais très bien que le "window.open" ne pourra pas fonctionner puisqu'on utilise du code compréhensible qu'en étant plugin Maxthon, comme "%max_security_id" et l'objet "external". Mais je n'ai pas trouvé de code permettant d'exécuter un fichier HTML du plugin...

J'ai une solution que j'utilise dans tous mes plugins (si j'ai bien compris ce probleme ) :

Pour ouvrir un fichier htm a partir d'un plugin, ou meme un sous menu drop du plugin :

Tu a un fichier toto.htm que tu veux ouvrir

1) A partir du plugin :

sid=%max_security_id;owin="";sp=external.readFile(sid,"NOMde tonPLUGIN","toto.htm");
sw=window.open(owin);sw.document.write(sp);

On lit le fichier , on ouvre un onglet vide et on ecrit le contenu dedans.

 

2) A partir d'un sous menu drop, il faut creer un autre fichier qui contiendra le meme code.

 

Et pour activer ce nouvel onglet :

tc=external.tab_count;
for(y=0;y<tc;y++){cur_url=external.get_tab(sid,y).document.title;
if(cur_url=="Titre du fichier")external.activate_tab(sid,y)}

On se base sur le titre du fichier qu'il faut mettre en concordance dans l'entete du toto.htm <title>nom</title> ( par le test url ca ne marche pas, il renvoie l'adresse de l'onglet précedent :unsure: )

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.