कैसे जांचें कि क्या वर्ग URL() है वर्तमान ब्राउज़र में समर्थित है? दस्तावेज़ों के आधार पर यह आईई में समर्थित नहीं है

मैं इस तरह की स्ट्रिंग से डोमेन प्राप्त करने के लिए इसका उपयोग करना चाहता हूं:

var text = ...
var domain = new URL(text).host;
1
Ilya Gazman 9 मार्च 2017, 18:48

3 जवाब

सबसे बढ़िया उत्तर

आप इसके साथ एक फीचर चेक कर सकते हैं

if ("URL" in window)

हालांकि यह मान्य नहीं होगा कि कार्यक्षमता सही है या नहीं। आप पॉलीफ़िल जोड़ने पर विचार कर सकते हैं।

ध्यान दें कि आईई/एज वास्तव में निर्माणकर्ताओं में वस्तुओं के रूप में निर्मित होता है, जिसका अर्थ है typeof Ctor === "object" उन ब्राउज़रों में true है। इसलिए यदि वे इसके लिए Edge में समर्थन जोड़ते हैं, तो "function" के चेक अमान्य हो जाएंगे।

3
Daniel A. White 9 मार्च 2017, 19:02

आप इसे पूरी विश्वसनीयता के साथ नहीं कर सकते। यदि URL मौजूद है और एक फ़ंक्शन है, तो आप परीक्षण के करीब आ सकते हैं:

if (typeof URL !== "function") {
     // It is not supported
}

फिर आप यह देखने के लिए और परीक्षण कर सकते हैं कि यह बतख की तरह कितना दिखता है:

function URL_is_supported() {
    if (typeof URL !== "function") {
        return false;
    }
    // Beware: You're calling the function here, so it it isn't the expected URL function it might have undesired side effects
    var url = new URL("http://example.com");
    if (url.hostname !== "example.com") {
        return false;
    }
    // and whatever other tests you wanted to do before you're convinced
    return true;
}
2
Quentin 9 मार्च 2017, 18:58

यह जांचने के लिए कि रूट स्तर (विंडो) पर कुछ भी समर्थित है या नहीं, बस इसे एक शर्त स्तर पर एक्सेस करने का प्रयास करें। ई.जी.

(window.URL) OR JUST (typeof URL === "function")

var a = window.URL ? window.URL(text).host : ....

यह भी याद रखना कि खिड़की के तथ्य में "यूआरएल" संपत्ति है इसका मतलब यह नहीं है कि यह एक वर्ग/फ़ंक्शन है और यह वही है जो आप उम्मीद करते हैं इसलिए सबसे अच्छा तरीका टाइपोफ संस्करण का उपयोग करके जांचना होगा जो कम से कम गारंटी देता है कि यह एक है समारोह

यूआरएल वास्तव में समर्थित है या नहीं, यह जांचने के लिए आप निकटतम हो सकते हैं, इसके प्रोटोटाइप और स्थिर कार्यों की जांच कर रहे हैं

function isURLSupported(){
    if(typeof window.URL!=="function" || typeof URL.createObjectURL !== "function" || typeof URL.revokeObjectURL !== "function"){
        return false;
    }
    var oURLprototype= ["host","hostname","href","origin","password","pathname","port","protocol","search","searchParams","username"];
    for(var i=0;i<oURLprototype.length;i++){
        if(URL.prototype.hasOwnProperty(oURLprototype[i])===undefined){
            return false;
        }
    }
    return true;
}

उन लोगों के लिए जो उन कार्यान्वयनों का समर्थन करेंगे जिनके पास प्रकार के रूप में वर्ग हैं ऑब्जेक्ट नॉट फंक्शन --इस फ़ंक्शन क्रेडिट https://stackoverflow.com/a/7356528/835753 को है।

function isFunction(functionToCheck) {
    var getType = {};
    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}
function isURLSupported(){
    if(!isFunction(window.URL) || !isFunction(URL.createObjectURL) || !isFunction(URL.revokeObjectURL)){
        return false;
    }
    var oURLprototype= ["host","hostname","href","origin","password","pathname","port","protocol","search","searchParams","username"];
    for(var i=0;i<oURLprototype.length;i++){
        if(URL.prototype.hasOwnProperty(oURLprototype[i])===undefined){
            return false;
        }
    }
    return true;
}
0
Community 23 मई 2017, 15:09