Mapy na Atlase http://amapy.atlas.cz umožňují (za současného používání řady dalších užitečných operací mapového systému)
i možnost vkládání(+editace) vlastních objektů (značky,popisy,...).
A tady při každém přístupu (nebo dojde-li k samoodhlášení) následuje otravné:
[A] Přihlásit se [B] Vyplnit dvojici polí email/heslo [C] Odeslat .....pěkně ručně!
Nejedná se o klasický formulář (takže k autofillu browser použít nelze), takže usiluji o eliminaci kroků [B][C] pomocí JS.
API využívá moderní objektový JS + framework MooTools; celá (poněkud rozsáhlá ale systematicky sestavená)
JS knihovna v souboru amap4.js se načte do paměti jen jednou - při prvním přístupu na stránky amapy.
Takže poté lze modifikovat metodu (objektu Smartnames) provádějící [C]=odeslání přihlašovacích údajů:
Původní metoda:
Smartnames.onLogin = function(e){
if(e.type=="keypress"&&e.key!="enter"){return;}
var mail=this.loginemail.value.trim();
var pass=this.loginpass.value;
this.logininfo.innerHTML="";
if(mail.length==0||mail.indexOf("@")<1){
this.logininfo.innerHTML="Zadejte V\xe1\u0161 email ...";return;}
if(pass.length<6){
this.logininfo.innerHTML="Heslo mus\xed b\xfdt alespo\u0148 6 znak\u016f dlouh\xe9 ...";return;}
this.login(mail,pass);
}
Po úpravě a vytvoření záložkové aplikace (bookmarkletu), umožňující spuštění (a tedy i modifikaci kódu) v čase, kdy je kompletně načten:
javascript:void( Smartnames.onLogin=function(e){this.logininfo.innerHTML="";this.login("aska@tiscali.cz","pswxxxx");} )
To je maximum kterého jsem dosáhl a teď bych chtěl využít ve Firefoxu add-on Greasemonkey,
který má umět spustit skript na určené stránce zcela automaticky;
Jenže (když jsem použil kód z bookmarkletu) tak nefungoval (protože se spustil před načtením stránky???)
Šlo by nějak nastavit, aby se spustil až po načtení ??? [zatím nemám GM prostudován do detailů]
Obvykle se používá window.onload; ale v dokumentaci AMAPI se uvádí že:
Inicializace - původní:Inicializace map může proběhnout tradičně pomocí load události elementu body. Na ní však nelze spoléhat.
Jediný nedotažený obrázek a událost load nebude vyvolána.Proto AMapy API vyhazuje událost domready.
Příklad:
<script type="text/javascript">
var Page = { load: function() {var mainMap = new AMap("mainMap"); mainMap.loadMaps()} } // načteni mapy
window.addEvent('domready', Page.load.bind(Page));
</script>
var Page={
load:function(){
document.title="Mapa \u010cesk\xe9 republiky a Evropy | Atlas.cz";
this.map=new AtlasMap("mainmap",{});
this.initControls();
this.map.tryLoadFromUrl();
$("showbubblehelp").addEvent("click",this.showBubbleHelp.bind(this));
Garbage.addClass(this);
},
showBubbleHelp:function(){
if(this.helpIsOpen){
this.map.bubble.close();
this.helpIsOpen=false;
return;
}
this.helpIsOpen=true;
var c=this.map.getGeoCenter();
var img=new Element("img").setStyles("width:562px; height: 322px;").setProperty("src","design/napoveda2.png");
this.map.showBubble(c,img,{maxSize:new ASize(606,410),maximizable:true,moveToShowAll:false});
var b=this.map.bubble;
if(b.minimalized){b.onMaxminClick();
b.maxMinBtn.style.display="none";}
},
initControls:function(){
[MainMenu,SearchForm,SearchNearby,ResultsSidebar,PoiManager,BubbleManager].each(function(bar){bar.init(this.map);},this);
}
};
window.addEvent("domready",Page.load.bind(Page));
Doufám, že to nějak půjde....
Pokud někdo "umí" MooTools a byl by ochoten, přidám relevantní kód sidebaru (=HTML)+ kompl.object Smartnames(=JS)