Dalam HTML, URL umum direpresentasikan dalam berbagai cara:
URL Relatif:
contoh.php
demo/contoh.php
./contoh.php
../../example.php
/contoh.php
URL mutlak:
http://dancewithnet.com/example.php
http://dancewithnet.com:80/example.php
https://dancewithnet.com/example.php
Pada saat yang sama, ada sejumlah besar nilai atribut elemen dalam HTML yang berupa URL. Umumnya, ada dua metode untuk mendapatkan nilai atribut URL ini menggunakan JavaScript:
URL absolut halaman saat ini adalah http://dancewithnet.com/
var oA = dokumen.getElementById('contoh-a');
oA.href == 'http://dancewithnet.com/example.php';
oA.getAttribute('href') == 'contoh.php';
Kami berharap mendapatkan URL absolut yang lengkap dengan mengakses atribut secara langsung, dan mendapatkan nilai atribut aslinya melalui metode getAttribute Faktanya, ini adalah hasil yang relatif ideal. Di antara semua browser A-level, hanya Firefox yang berhasil mendapatkan hasil ini. Seperti IE8, browser lain memiliki kasus yang kurang lebih khusus. Silakan lihat contoh demonstrasi untuk atribut spesifik dari elemen mana yang ada.
Masalah di sebagian besar browser adalah kedua metode mengembalikan nilai atribut asli, namun dalam aplikasi sebenarnya, yang sering dibutuhkan adalah URL absolutnya. Solusi dalam " Berurusan dengan nilai HREF yang tidak memenuhi syarat " terlalu rumit. yang sangat sederhana jika Anda tidak mempertimbangkan perbedaan kode browser:
//IE6, IE7, Safari, Chrome, Opera
oForm.aksi == 'contoh.php';
oA.getAttribute('action') == 'example.php';
//Solusi umum untuk mendapatkan URL absolut
getQualifyURL(oForm,'action') == 'http://dancewithnet.com/example.php';
getQualifyURL = fungsi(oEl,sAttr){
var sUrl = oEl[sAttr],
oD,
bLakukan = salah;
//Apakah itu versi sebelum IE8
//http://www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/
//http://msdn.microsoft.com/en-us/library/7kx09ct1%28VS.80%29.aspx
/*@cc_on
mencoba{
bDo = @_jscript_version < 5.8 ?benar : @false;
}menangkap(e){
bLakukan = salah;
}
@*/
//Jika itu Safari, Chrome dan Opera
if(/a/.__proto__=='//' || /source/.test((/a/.toString+''))
||. /^fungsi (/.test([].sort)){
bLakukan = benar;
}
jika(bLakukan){
oD = dokumen.createElement('div');
/*
//Hasil operasi DOM tidak akan berubah
var oA = dokumen.createElement('a');
oA.href = oEl[sAttr];
oD.appendChild(oA);
*/
oD.innerHTML = [''].join('');
sUrl = oD.firstChild.href;
}
kembalikan Url;
}
Ada beberapa hal yang lebih menarik tentang dua browser prasejarah IE6 dan IE7. Nilai atribut yang diperoleh dari kedua metode pada elemen HTML A, AREA dan IMG semuanya merupakan URL absolut.Untungnya , Microsoft menyediakan parameter kedua untuk getAttribute ini Masalah dapat diselesaikan, dan pada saat yang sama, masalah pengembalian atribut asli dari kedua metode yang disebutkan di atas juga dapat diselesaikan untuk elemen IFEAM dan LINK:
Teks asli: http://dancewithnet.com/2009/07/27/get-right-url-from-html/
URL absolut halaman saat ini adalah http://dancewithnet.com/
var oA = dokumen.getElementById('contoh-a'),
oLink = document.getElementById('contoh-a');
oA.href == 'http://dancewithnet.com/example.php';
oA.getAttribute('href') == 'http://dancewithnet.com/example.php';
oA.getAttribute('href',2) == 'contoh.php';
oLink.href == 'contoh.php';
oLink.getAttribute('href') == 'contoh.php';
oLink.getAttribute('href',4) == 'http://dancewithnet.com/example.php';