IE11 - 对象不支持此操作 - URL对象 - 解决方法

fra*_*al5 13 url internet-explorer-11

我正在尝试使用此命令将URL字符串转换为URL对象:

var newUrl = new URL("http://www.testsite.com?name=abc&class=123");
Run Code Online (Sandbox Code Playgroud)

它适用于Chrome和Firefox,但不适用于IE11.有没有已知的解决方法?

谢谢.

Eri*_*itz 10

不,URL对象不可用在IE https://developer.mozilla.org/en-US/docs/Web/API/URL

但是,您可以使用一些小型库来伪造它http://blog.stevenlevithan.com/archives/parseuri

// parseUri 1.2.2
// (c) Steven Levithan <stevenlevithan.com>
// MIT License
// http://blog.stevenlevithan.com/archives/parseuri

function parseUri (str) {
    var o   = parseUri.options,
        m   = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
        uri = {},
        i   = 14;

    while (i--) uri[o.key[i]] = m[i] || "";

    uri[o.q.name] = {};
    uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
        if ($1) uri[o.q.name][$1] = $2;
    });

    return uri;
};

parseUri.options = {
    strictMode: false,
    key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
    q:   {
        name:   "queryKey",
        parser: /(?:^|&)([^&=]*)=?([^&]*)/g
    },
    parser: {
        strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
        loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
    }
};
Run Code Online (Sandbox Code Playgroud)

用法

parseUri.options.strictMode = true;
Run Code Online (Sandbox Code Playgroud)