ローカルのバイナリをBASE64エンコード

XMLHttpRequest#overrideMimeType使ってるからMozilla Firefox限定な上に、ファイルパス直書きなので、超不便。何とかしたい。XPCOMを使えばいいのかなあねむい。

<!DOCTYPE html>
<title>base64</title>
<textarea id="t" rows="2" cols="20"></textarea>
<script type="text/javascript" src="base64.js"></script>
<script type="text/javascript">
(function() {
	var f = 'filepath', t = document.getElementById('t'), r = new XMLHttpRequest();
	r.open('GET', f, false);
	r.overrideMimeType('text/plain; charset=x-user-defined');
	r.send(null);
	for (var i = 0, b = [], s = r.responseText, l = s.length; i < l; i++) {
		b.push(s.charCodeAt(i) & 0xff);
	}
	t.value = base64encode(String.fromCharCode.apply(String, b));
	t.select();
})();
</script>

WSH

<?xml version="1.0" encoding="utf-8"?>
<job>
<object id="dom" progid="Microsoft.XMLDOM"/>
<object id="ado" progid="ADODB.Stream"/>
<reference object="ADODB.Stream"/>
<script language="JScript"><![CDATA[
(function() {
	var path = WSH.arguments(0);

	ado.open();
	ado.type = adTypeBinary;
	ado.loadFromFile(path);
	var binary = ado.read();
	ado.close();

	var element = dom.createElement('tmp');
	element.dataType = 'bin.base64';
	element.nodeTypedValue = binary;

	WSH.echo(element.text.replace(/\n|\r\n?/g, ''));
})();
]]></script>
</job>
@echo off
setlocal
cscript //Nologo base64.wsf base64.wsf > base64.log
endlocal
echo on