Toto je můj kód:
function insert(){ var loc_array = document.location.href.split('/'); var linkElement = document.getElementById("waBackButton"); var linkElementLink = document.getElementById("waBackButtonlnk"); linkElement.innerHTML=loc_array[loc_array.length-2]; linkElementLink.href = loc_array[loc_array.length]; }
Chci linkElementLink.href
zachytit vše kromě poslední položky v poli. Právě teď je rozbitá a předmět, než dostane předposlední předmět.
Odpověď
Použijte pathname
přednostně před href
načíst pouze část cesty odkazu. V opačném případě získáte neočekávané výsledky, pokud existuje ?query
nebo #fragment
přípona nebo cesta je /
(žádný rodič).
linkElementLink.href= location.pathname.split('/').slice(0, -1).join('/');
(Ale pak byste jistě mohli říct:)
linkElementLink.href= '.';
Nedělejte to:
linkElement.innerHTML=loc_array[loc_array.length-2];
Nastavení HTML z libovolného řetězce je nebezpečné. Pokud adresa URL, ze které jste převzali tento text, obsahuje znaky, které jsou v HTML speciální, například <
a &
, mohli uživatelé vložit značky. Pokud byste mohli získat <script>
v adrese URL (což byste neměli mít, protože je neplatná, ale některý prohlížeč vám to stejně může umožnit) byste měli bezpečnostní díry v oblasti skriptování mezi weby.
Chcete-li nastavit text prvku namísto HTML, použijte buď document.createTextNode('string')
a připojte jej k prvku nebo kódu větve pro použití innerText
(IE) nebo textContent
(jiné moderní prohlížeče).