8

मैं थोड़ी देर के लिए Googling रहा है और इस सवाल का जवाब नहीं मिल रहा है। मेरी समस्या निम्नानुसार है:मैं आईई 7 के साथ सापेक्ष यूआरएल का उपयोग क्यों नहीं कर सकता?

मेरी jquery के लिए, मुझे अपने लिंक को पूर्ण के बजाय सापेक्ष होने की आवश्यकता है। मेरा PHP रिश्तेदार यूआरएल वापस करने के लिए सेट है और सब कुछ ठीक काम कर रहा है, जब तक कि मैं इसे आईई 7 में परीक्षण नहीं करता। किसी कारण से, आईई 7 मेरे रिश्तेदार यूआरएल को abosulute में बदलता रहता है, जो मेरी जेएस स्क्रिप्ट को तोड़ देता है। क्या यह सामान्य है? क्या इसके आसपास जाने का कोई तरीका है?

उदाहरण के लिए:

IE8, क्रोम, फायरफॉक्स, सफारी आदि -

<a href='/page' onclick='click_handler(this);return false;'>clicky</a> 

IE7 -

<a href='http://www.myurl.com/page' onclick='click_handler(this);return false;'>clicky</a> 
+0

मुझे लगता है कि उपरोक्त आपके दोनों उदाहरण वास्तव में पूर्ण URL हैं। एक सापेक्ष पथ कुछ होगा ../../page.html या ./folder/page.html – Sandro

+0

umm। । । वास्तव में? निश्चित रूप से पहला वाला सापेक्ष है क्योंकि यह वर्तमान डोमेन से संबंधित है। अगर वह लिंक google.com पर था तो यह ओटी http://www.google.com/page इंगित करेगा। – gomezuk

उत्तर

9

मुझे क्या init पर baseurl हड़पने है, जैसे: किसी को भी एक ऐसी ही समस्या है जो के लिए, यहाँ क्या मेरे क्लिक ईवेंट हैंडलर लगता है कि है

var url = $(this).attr("href").replace(baseUrl, ""); 

इसके अलावा, आप देख सकते हैं कि href "सामान्यीकृत" है .support() का उपयोग कर:

मेरी URL हैंडलर, baseurl पट्टी
$.support.hrefNormalized 

(true लौटाता है यदि ब्राउज़र जब एक href मूल्य हथियाने कोई संशोधन करता है, तो यह IE में वर्तमान में गलत है।)

+0

+1 उत्कृष्ट उत्तर। मैंने इसे 'var baseUrl = window.location.href.split ('/') का उपयोग करने के लिए संशोधित किया। स्लाइस (0,3)। जॉइन ('/');' - थोड़ा और संक्षिप्त और यूआरएल जैसे ' http: // www.example.com/foo/बार/whatever'। –

0

अगर मैं तुम्हें थे, मैं ब्राउज़र का पता लगाने का उपयोग करें और एक जोड़ना होगा यूआरएल को सापेक्ष पथ पर पट्टी करने के लिए खंड। मैं jQuery से 100% परिचित नहीं हूं, लेकिन मुझे कल्पना है कि आप इसे एक साधारण विभाजन और पुनर्निर्माण, या REGEX क्वेरी के साथ कर सकते हैं।

देखें jQuery यूआरएल पार्सर प्लगइन: http://plugins.jquery.com/project/url_parser

+1

ब्राउज़र की पहचान के अलावा, अच्छी योजना। बस यूआरएल देखें, और यदि यह http [s] से शुरू होता है, तो यूआरएल के उस भाग को पट्टी करें। – jvenema

+0

हाँ यह मेरा एकमात्र विकल्प हो सकता है। मैं उम्मीद कर रहा था कि हालांकि एक गैर जावास्क्रिप्ट समाधान था। – gomezuk

0

ठीक है, यह सबसे अच्छा तरीका यह है लगता है jQuery में बाहर डोमेन पट्टी है। में

var baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("/") + 1); 

... और फिर:

var href_attr = element.getAttribute('href'); 
if (href_attr.indexOf('http://')>-1) { 
    href_attr = href_attr.substr(location.href.length-1); 
}; 
0

यहाँ-स्ट्रिंग के बजाय विभाजन का उपयोग करता है JKS के जवाब का एक संशोधित संस्करण है। थोड़ा और सुरुचिपूर्ण आईएमओ:

stripBaseUrl : function(url){ 
    var urlArray = url.split("/"); 
    return urlArray[urlArray.length - 1]; 
} 
संबंधित मुद्दे