Andrise programmeerimisalane WIKI
Suunamisel REFERER väärtuse hoidmine
JavaScript võimaldab kasutaja mõnele muule aadressile suunata läbi window omaduse location. Viimane on siis getter/setter tüüpi omadus, juhul kui omistada sellele tekstiline väärtus (setter), üritab JavaScript brauserit navigeerida aadressile, milleks on saadud tekstiväärtus.
window.location = 'http://www.neti.ee/';
Samas aga getterina töötades sisaldab location endas veel mitmeid omadusi ja meetodeid nagu omadus href (sisuliselt samasugune setter nagu location ise), meetod replace, mis asendab brauseris eesoleva lehe parameetrina saadud aadressiga ILMA brauseri navigeerimisajalukku viidet jätmata jne.
window.location.href = 'http://www.neti.ee'; // sama mis window.location = '...' window.location.replace('http://www.neti.ee'); // brauseri ajalukku lehevahetusest jälge ei jää!
Kuigi window.location on seega üks igati kasulik moodustis, on sellel ka mõned puudused.
- Ei ole võimalik märkida sihtkohaks teist akent või freimi, kui see milles skript ise asub
- Internet Explorer ei edasta lehe aadressi, kus skript asus REFERER aadressina, seega sihtkoht ei saa teada kust lehelt päring tuli
Õnneks on kõik korraldatav, window.location asemel tuleb kasutada lihtsalt mingit muud varianti kasutaja suunamiseks teisele aadressile. Katsetuste järgi sobib selle jaoks kõige paremini <FORM method=GET> kasutamine. Tuleb luua lehele dünaamiliset <form> element, seada selle meetodiks GET ja actioniks URL, soovi korral seada ka TARGET ja kutsuda vastloodud vormil välja sündmus SUBMIT. Brauser suunab peale seda kasutaja õige lehe juurde, säilub ka REFERER väärtus ja (vähemalt praegu) puudub mure PopUp Blockerite pärast, lehte saab vabalt avada ka uude aknasse.
/** * go(url [, target]) -> undefined * - url {string} veebiaadress mida soovitakse avada * - target {string} (valikuline) sihtraam kuhu aadress avada, näiteks "_blank" * Funktsioon suunab kasutaja brauseri ringi soovitud aadressile või avab uue akna */ function go(url, target){ // loome vormielemendi var goform = document.createElement('form'); // märgime selle peidetuks goform.style.display='none'; // seame atribuudi METHOD=GET goform.setAttribute('method','get'); // seame atribuudi ACTION=URL goform.setAttribute('action',url); // kui olemas, seame ka TARGET=TARGET if(target){ goform.setAttribute('target',target); } // lisame loodud vormielemendi lehele document.body.appendChild(goform); // ja saadame ära goform.submit(); // ja kustutame ka kohe (näiteks kui link avati uude aknasse) goform.parentNode.removeChild(goform); }
Käidud rada: • git_github • close_tab • funcparams • geolocation • iframe • jstorage • location_referer