html中對于a標(biāo)簽href屬性中的一個(gè)很少人知道的坑
發(fā)表時(shí)間:2024-05-13 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]由于公司需要,小菜最近在搞app web開發(fā),目前只有ios和android版本,雖然僅此兩個(gè)版本,但是依然要考慮瀏覽器兼容性問題,因?yàn)閍ndroid和ios默認(rèn)瀏覽器內(nèi)核是不一樣的。 先說說兼容性問題是什么。假如有這樣一個(gè)URL: http://www.kpdown.c...
由于公司需要,小菜最近在搞app web開發(fā),目前只有ios和android版本,雖然僅此兩個(gè)版本,但是依然要考慮瀏覽器兼容性問題,因?yàn)閍ndroid和ios默認(rèn)瀏覽器內(nèi)核是不一樣的。
先說說兼容性問題是什么。假如有這樣一個(gè)URL:
http://www.kpdown.com/search?name=Ben Nadel
此URL后邊有一個(gè)name參數(shù),只不過參數(shù)的值竟然帶了空格,這樣的鏈接,直接用android瀏覽器訪問,是沒有問題的,但用ios的瀏覽器訪問,這就是一個(gè)錯(cuò)誤的URL,會(huì)報(bào)錯(cuò)的!
所以,我們會(huì)想到編碼,name參數(shù)的值,可以用encodeURIComponent()方法進(jìn)行編碼,然后再拼接到URL上,這樣就安全了(encodeURIComponent是js原生方法,直接用即可)。
然后,我們可以這樣利用超鏈接:
<a href="javascript:openURL('http://www.kpdown.com/search?name=Ben%20Nadel');" >查詢</a>
利用openURL這個(gè)js方法進(jìn)行頁面跳轉(zhuǎn)(假設(shè)有一個(gè)openURL方法,其中不涉及任何解碼操作)。
這段代碼在android中運(yùn)行正常,但到了ios中,依然報(bào)錯(cuò),的確是編碼了,為什么還是不行呢?
請看如下代碼:
<a href="javascript:openURL('http://www.kpdown.com/search?name=Ben%20Nadel');">測試href</a>
<a href="javascript:;" onclick="javascript:openURL('http://www.kpdown.com/search?name=Ben%20Nadel');">測試onclick</a>
<script>
function openURL(url){
/*
* 測試href --print--> http://www.kpdown.com/search?name=Ben Nadel
* 測試onclick --print--> http://www.kpdown.com/search?name=Ben%20Nadel
*/
console.log(url);
}
</script>
由此可見:“萬惡”的href屬性,在調(diào)用openURL傳參時(shí)自動(dòng)解碼,而onclick屬性則保持參數(shù)原封不動(dòng)。
因此,小菜強(qiáng)烈不推薦使用a標(biāo)簽的href屬性調(diào)用js,onclick方法非常的科學(xué),非常的穩(wěn)定,非常的正確,href的本意就是用來跳轉(zhuǎn)URL,就不要用它來執(zhí)行js啦。其實(shí)更好的做法是綁定事件,那樣代碼更好管理,看起來也整潔。
以上就是html中關(guān)于a標(biāo)簽href屬性中的一個(gè)很少人知道的坑的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
網(wǎng)站建設(shè)是一個(gè)廣義的術(shù)語,涵蓋了許多不同的技能和學(xué)科中所使用的生產(chǎn)和維護(hù)的網(wǎng)站。