diff --git a/index.html b/index.html index 474b86d..dad2f40 100644 --- a/index.html +++ b/index.html @@ -13,8 +13,8 @@ document.getElementById('help').style.display = 'none'; var tree = document.getElementById('tree'); var dump = document.getElementById('dump'); - tree.innerHTML = ""; - dump.innerHTML = ""; + tree.innerHTML = ''; + dump.innerHTML = ''; try { var asn1 = ASN1.decode(der); tree.appendChild(asn1.toDOM()); @@ -37,31 +37,45 @@ } return false; } + function decodeBinaryString(str) { + try { + var der = []; + for (var i = 0; i < str.length; ++i) + der[der.length] = str.charCodeAt(i); + decode(der); + } catch (e) { + tree.innerHTML = e; + } + return false; + } function help() { - document.getElementById('tree').innerHTML = ""; - document.getElementById('dump').innerHTML = ""; + document.getElementById('tree').innerHTML = ''; + document.getElementById('dump').innerHTML = ''; document.getElementById('help').style.display = 'block'; return false; } function load() { var file = document.getElementById('file'); + if (!file.files) { + alert("Your browser doesn't support reading files; try Firefox or Chrome."); + return false; + } if (file.files.length == 0) { alert("Select a file to load first."); return false; } - if (!file.files[0].getAsBinary) { - alert("Cannot load files: your browser doesn't support the File.getAsBinary() method; try with Firefox."); + var f = file.files[0]; + if (f.getAsBinary) { // Firefox way + var derStr = f.getAsBinary(); + decodeBinaryString(derStr); + } else if (window.FileReader) { // Chrome way + var r = new FileReader(); + r.onloadend = function() { decodeBinaryString(r.result); } + derStr = r.readAsBinaryString(f); + } else { + alert("Your browser doesn't support reading files; try Firefox or Chrome."); return false; } - var derStr = file.files[0].getAsBinary(); - var der = []; - for (var i = 0; i < derStr.length; ++i) - der[der.length] = derStr.charCodeAt(i); - try { - decode(der); - } catch (e) { - tree.innerHTML = e; - } return false; }