ก่อนที่จะตัดสินใจว่าจะใช้<base>
แท็กหรือไม่คุณต้องเข้าใจวิธีการทำงานสิ่งที่สามารถใช้งานได้และสิ่งที่เกี่ยวข้องคืออะไรและในที่สุดก็มีมากกว่าข้อดี / ข้อเสีย
<base>
แท็กส่วนใหญ่ eases สร้างการเชื่อมโยงญาติใน templating ภาษาที่คุณไม่จำเป็นต้องกังวลเกี่ยวกับบริบทปัจจุบันในทุกการเชื่อมโยง
คุณสามารถทำเช่น
<base href="${host}/${context}/${language}/">
...
<link rel="stylesheet" href="css/style.css" />
<script src="js/script.js"></script>
...
<a href="home">home</a>
<a href="faq">faq</a>
<a href="contact">contact</a>
...
<img src="img/logo.png" />
แทน
<link rel="stylesheet" href="/${context}/${language}/css/style.css" />
<script src="/${context}/${language}/js/script.js"></script>
...
<a href="/${context}/${language}/home">home</a>
<a href="/${context}/${language}/faq">faq</a>
<a href="/${context}/${language}/contact">contact</a>
...
<img src="/${context}/${language}/img/logo.png" />
โปรดทราบว่า<base href>
ค่าลงท้ายด้วยเครื่องหมายสแลชมิฉะนั้นจะถูกตีความเทียบกับเส้นทางสุดท้าย
ความเข้ากันได้ของเบราว์เซอร์ทำให้เกิดปัญหาเฉพาะใน IE <base>
แท็กใน HTML ที่ระบุไว้ไม่ได้มีแท็กสิ้นสุดลง</base>
ดังนั้นจึงเป็นเรื่องถูกต้องตามกฎหมายที่จะใช้เพียงแค่<base>
ไม่มีป้ายสิ้น อย่างไรก็ตาม IE6 คิดเป็นอย่างอื่นและเนื้อหาทั้งหมดหลังจากที่<base>
แท็กอยู่ในกรณีเช่นนี้ถูกวางไว้เป็นลูกของ<base>
องค์ประกอบในต้นไม้ HTML DOM สิ่งนี้สามารถทำให้เกิดปัญหาตั้งแต่แรกเห็นใน Javascript / jQuery / CSS ซึ่งเป็นองค์ประกอบที่ไม่สามารถเข้าถึงได้อย่างสมบูรณ์ในตัวเลือกเฉพาะเช่นhtml>body
จนกระทั่งคุณค้นพบในตัวตรวจสอบ HTML DOM ว่าควรมีbase
(และhead
) อยู่ระหว่างนั้น
การแก้ไข IE6 ทั่วไปใช้ความคิดเห็นแบบมีเงื่อนไขของ IE เพื่อรวมแท็กปิดท้าย:
<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->
หากคุณไม่สนใจ W3 Validator หรือเมื่อคุณใช้ HTML5 อยู่แล้วคุณก็สามารถปิดได้ด้วยตนเองเว็บเบราเซอร์ทุกเครื่องก็รองรับได้:
<base href="http://example.com/en/" />
การปิด<base>
แท็กยังแก้ไขความบ้าของ IE6 บน WinXP SP3 ทันทีเพื่อร้องขอ<script>
ทรัพยากรด้วย URI ที่เกี่ยวข้องsrc
ในวงวนไม่สิ้นสุด
อีกปัญหาที่อาจเกิดขึ้น IE จะประจักษ์เมื่อคุณใช้ URI สัมพันธ์ใน<base>
แท็กเช่นหรือ<base href="https://stackoverflow.com//example.com/somefolder/">
<base href="https://stackoverflow.com/somefolder/">
สิ่งนี้จะล้มเหลวใน IE6 / 7/8 อย่างไรก็ตามนี่ไม่ใช่ความผิดของเบราว์เซอร์ การใช้ URI ที่สัมพันธ์กันใน<base>
แท็กนั้นอยู่ที่ผิดของตัวเอง ข้อกำหนด HTML4ระบุว่าควรจะเป็น URI แน่นอนจึงเริ่มต้นด้วยhttp://
หรือhttps://
โครงการ นี้ได้รับการลดลงในสเปค HTML5 ดังนั้นหากคุณใช้ HTML5 และกำหนดเป้าหมายเฉพาะเบราว์เซอร์ที่รองรับ HTML5 เท่านั้นคุณควรใช้ URI ที่สัมพันธ์กันใน<base>
แท็ก
เป็นไปโดยใช้ชื่อ / กัญชาเบรกส่วนชอบ<a href="#anchor">
เบรกสตริงแบบสอบถามเหมือน<a href="?foo=bar">
และจุดยึดเส้นทางส่วนเช่น<a href=";foo=bar">
กับ<base>
แท็กคุณพื้นประกาศทั้งหมดเชื่อมโยงญาติญาติให้มันรวมทั้งชนิดของเบรกเหล่านั้น ไม่มีลิงก์ที่เกี่ยวข้องใด ๆ ที่เกี่ยวข้องกับ URI คำขอปัจจุบันอีกต่อไป (ซึ่งจะเกิดขึ้นหากไม่มี<base>
แท็ก) นี่อาจเป็นเรื่องที่สับสนสำหรับผู้เริ่มต้น ในการสร้างแองเคอร์เหล่านั้นอย่างถูกวิธีคุณจำเป็นต้องรวม URI ด้วย
<a href="${uri}#anchor">hash fragment</a>
<a href="${uri}?foo=bar">query string</a>
<a href="${uri};foo=bar">path fragment</a>
ซึ่ง${uri}
โดยทั่วไปแปลว่า$_SERVER['REQUEST_URI']
ใน PHP ${pageContext.request.requestURI}
ใน JSP และ#{request.requestURI}
ใน JSF ตั้งข้อสังเกตว่าควรจะมีกรอบ MVC เช่น JSF <base>
มีแท็กลดทุกต้นแบบนี้และขจัดความจำเป็นในการ ดูเพิ่มเติมอ่าวอะไร URL ไปยังการใช้งานเพื่อการเชื่อมโยง / นำทางไปยังหน้า