我想添加一些在所有浏览器中都不可用的特定对象,属性和方法(我只专门针对E11和Edge)。具体来说,我正在尝试添加Object.assign()
和URL.searchParams.get()
。我肯定会放弃尝试使用这些方法,并且恰好使用我自己的替代方法,这些方法可以在所有浏览器上使用,或者更好地使用polyfill,但这不是我的目标。请用它来提升我的知识(或者也许是强迫症)。
我的尝试如下。 Object.assign()
似乎已经足够好了,我甚至让URL.searchParams.get()
使用IE11。
我的困难在于Edge和URL.searchParams.get()
。部分支持URL
所以我不想像IE11那样覆盖整个事情,但只想添加最终的searchParams.get()
部分。如何检测是否支持此方法?
//Crutches for IE and Edge
if(typeof Object.assign !== 'function'){ //IE only
Object.assign=function(target,source1){
return [target,source1].reduce(function (r, o) {
Object.keys(o).forEach(function (k) {
r[k] = o[k];
});
return r;
}, {});
}
}
function _get(param) {
if (!this.params) {
var params = {};
var search = decodeURIComponent(window.location.href.slice(window.location.href.indexOf('?') + 1));
var definitions = search.split('&');
definitions.forEach(function (val, key) {
var parts = val.split('=', 2);
params[parts[0]] = parts[1];
});
this.params = params;
}
return this.params[param] ? this.params[param] : null;
}
if (typeof URL !== 'function') { //IE only
URL = function (href) {
this.href = href;
}
URL.prototype.searchParams = {get: _get}
}
if (typeof URL.searchParams !== 'function') { //Edge
//How do I deal with this for Edge as URL is a function ,and URL.searchParams will not even be set for modern browsers
}
console.log(Object.assign({a:'a',b:'b',c:'c'},{a:'A',b:'B',a:'D'}))
var url = new URL(window.location.href);
console.log('pg', url.searchParams.get('pg'));