window.atob 是 JavaScript 中用于将 base64 编码的字符串解码为原始字符串的方法。它在大多数现代浏览器中都得到支持,但在一些旧版本的浏览器中可能不被支持。
为了兼容性,可以使用以下代码来检测浏览器是否支持 window.atob 方法,并提供替代实现:
if (!window.atob) {
window.atob = function(encodedString) {
var base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
var decodedString = '';
var currentChar, charCode1, charCode2, charCode3, encIndex1, encIndex2, encIndex3, encIndex4;
for (var i = 0; i < encodedString.length; i += 4) {
encIndex1 = base64Chars.indexOf(encodedString[i]);
encIndex2 = base64Chars.indexOf(encodedString[i + 1]);
encIndex3 = base64Chars.indexOf(encodedString[i + 2]);
encIndex4 = base64Chars.indexOf(encodedString[i + 3]);
charCode1 = (encIndex1 << 2) | (encIndex2 >> 4);
charCode2 = ((encIndex2 & 15) << 4) | (encIndex3 >> 2);
charCode3 = ((encIndex3 & 3) << 6) | encIndex4;
decodedString += String.fromCharCode(charCode1);
if (encIndex3 !== 64) {
decodedString += String.fromCharCode(charCode2);
}
if (encIndex4 !== 64) {
decodedString += String.fromCharCode(charCode3);
}
}
return decodedString;
};
}
这段代码会先检测 window.atob 方法是否存在,如果不存在,则定义一个替代实现。这个替代实现会根据 base64 字符串的编码规则来逐个解码字符,并将解码后的字符拼接成最终的原始字符串。注意,这只是一个简单的替代实现,可能不如浏览器原生的方法效率高