2012-02-11 7 views
5

मुझे spec के अनुसार पता है, base के href एक पूर्ण यूआरआई होना चाहिए।आईई को सापेक्ष href के साथ एचटीएमएल बेस टैग का समर्थन कैसे करें? जैसे: `<base href =" ../ "></base>`

href = uri [CT] 
This attribute specifies an absolute URI that acts as the base URI for resolving relative URIs. 

लेकिन फ़ायरफ़ॉक्स और क्रोम समर्थन संबंधित यूआरआई, उदाहरण के लिए ../../, जो कि मेरी वर्तमान परियोजना का बहुत महत्वपूर्ण है। मुझे अपने प्रोजेक्ट के लिए "रिश्तेदार बेस href" के अलावा कोई बेहतर समाधान नहीं मिला है।

आईई के लिए सापेक्ष यूआरआई का समर्थन करने के लिए कोई हैक्स या वर्कग्राउंड है? मेरे वेब पेज अब फ़ायरफ़ॉक्स और क्रोम में अच्छी तरह से काम करते हैं, लेकिन इसे आईई का समर्थन करना है।

+0

मुझे आईई के लिए मिला कि बेस href बस इतना ठीक काम करता है जब तक आप एक स्तर तक जाने की कोशिश नहीं करते हैं। – Joshua

+0

लेकिन मुझे इसे कई स्तरों के लिए जाने की आवश्यकता है – Freewind

+0

वे स्थैतिक HTML पृष्ठ जेनरेट किए गए हैं। मुझे उन्हें एक सामान्य http सर्वर पर काम करने की ज़रूरत है, लेकिन यूआरएल को पूर्व निर्धारित नहीं किया जा सकता है। – Freewind

उत्तर

5

उपयोग इस समारोह पूर्ण करने के लिए अपने URL परिवर्तित करने के लिए:

function toAbsURL(s) { 
    var l = location, h, p, f, i; 
    if (/^\w+:/.test(s)) { 
     return s; 
    } 
    h = l.protocol + '//' + l.host + (l.port!=''?(':' + l.port):''); 
    if (s.indexOf('/') == 0) { 
     return h + s; 
    } 
    p = l.pathname.replace(/\/[^\/]*$/, ''); 
    f = s.match(/\.\.\//g); 
    if (f) { 
     s = s.substring(f.length * 3); 
     for (i = f.length; i--;) { 
     p = p.substring(0, p.lastIndexOf('/')); 
     } 
    } 
    return h + p + '/' + s; 
    } 

आप

var base = document.getElementsByTagName('base')[0]; 
base.href = toAbsURL(base.href); 

उदाहरण http://jsfiddle.net/tEpkx/1/

इस्तेमाल कर सकते हैं सिवाय आप ब्राउज़र भी पता लगाने के लिए है, और इसे केवल आईई के लिए चलाएं। अन्य ब्राउज़रों को base स्वचालित रूप से टैग के href द्वारा विंडो.लोकेशन अपडेट किया जाएगा और यह कोड स्निपेट इसे फिर से बदल देगा। तो जैसा कि

<!--[if IE]> 
<script type="text/javascript"> 
var base = document.getElementsByTagName('base')[0]; 
base.href = toAbsURL(base.href); 
</script> 
<![endif]--> 

ps इसे लिखने: <base /> मात्र एक टैग है, यह बंद करने एक आवश्यकता नहीं है।

अपडेट किया गया है ताकि पोर्ट नंबर को सेट किया जा सके।

+0

धन्यवाद, यह अच्छी तरह से काम करता है। क्या यह बंदरगाह के साथ एक यूआरएल का समर्थन करता है? जैसे: 'http: //aaa.com: 8080/बीबीबी'? – Freewind

+0

@ फ्रीवाइंड नोप, लेकिन 'h = l.protocol + '//' + l.host; '' h = l.protocol +' // '+ l.host +': '+ l.port;' के साथ बदलें और यह समर्थन करेगा। मैंने कोड अपडेट किया है। – Cheery

+0

लिपि अच्छी है। शर्मिंदा आपने सार्थक चर का उपयोग नहीं किया हालांकि ... –

संबंधित मुद्दे