// ==UserScript== | |
// @name CrosDomainUploadTest | |
// @namespace http://use.i.E.your.homepage/ | |
// @version 0.1 | |
// @description enter something useful | |
// @match http://dobrochan.com/* | |
// @copyright 2012+, You | |
// @grant GM_xmlhttpRequest | |
// ==/UserScript== | |
var stringToByteArray = function(str) { | |
"use strict"; | |
var array = new Uint8Array(str.length), | |
i, il; | |
for (i = 0, il = str.length; i < il; ++i) { | |
array[i] = str.charCodeAt(i) & 0xff; | |
} | |
return array; | |
}; | |
var arrayBufferDataUri = function(raw) { | |
"use strict"; | |
var base64 = '', | |
encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', | |
bytes = new Uint8Array(raw), | |
byteLength = bytes.byteLength, | |
byteRemainder = byteLength % 3, | |
mainLength = byteLength - byteRemainder, | |
a, b, c, d, | |
chunk; | |
// Main loop deals with bytes in chunks of 3 | |
for (var i = 0; i < mainLength; i = i + 3) { | |
// Combine the three bytes into a single integer | |
chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; | |
// Use bitmasks to extract 6-bit segments from the triplet | |
a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18 | |
b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12 | |
c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6 | |
d = chunk & 63; // 63 = 2^6 - 1 | |
// Convert the raw binary segments to the appropriate ASCII encoding | |
base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; | |
} | |
// Deal with the remaining bytes and padding | |
if (byteRemainder == 1) { | |
chunk = bytes[mainLength]; | |
a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2 | |
// Set the 4 least significant bits to zero | |
b = (chunk & 3) << 4; // 3 = 2^2 - 1 | |
base64 += encodings[a] + encodings[b] + '=='; | |
} else if (byteRemainder == 2) { | |
chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; | |
a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10 | |
b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4 | |
// Set the 2 least significant bits to zero | |
c = (chunk & 15) << 2; // 15 = 2^4 - 1 | |
base64 += encodings[a] + encodings[b] + encodings[c] + '='; | |
} | |
return base64; | |
}; | |
var getURLasAB = function(url, cb) { | |
"use strict"; | |
if (navigator.userAgent.match(/Chrome\/([\d.]+)/)) { | |
GM_xmlhttpRequest({ | |
method: "GET", | |
url: url, | |
responseType: "arraybuffer", | |
onload: function(oEvent) { | |
console.log(oEvent); | |
cb(oEvent.response); | |
}, | |
onerror: function(oEvent) { | |
console.log('url get error'); | |
} | |
}); | |
} else { | |
GM_xmlhttpRequest({ | |
method: "GET", | |
url: url, | |
overrideMimeType: "text/plain; charset=x-user-defined", | |
onload: function(oEvent) { | |
var ff_buffer = stringToByteArray(oEvent.responseText || oEvent.response); | |
cb(ff_buffer.buffer); | |
}, | |
onerror: function(oEvent) { | |
console.log('url get error'); | |
} | |
}); | |
} | |
}; | |
var btn = document.createElement("input"); | |
btn.type = 'button'; | |
btn.value = 'Get URL'; | |
btn.name = 'GetURL'; | |
btn.onclick = function() { | |
var url = prompt("URL"); | |
getURLasAB(url, function(AB) { | |
var src = 'data:application/octet-stream;base64,' + arrayBufferDataUri(AB), | |
img = document.createElement("img"); | |
img.src = src; | |
document.body.appendChild(img); | |
}); | |
}; | |
document.body.appendChild(btn); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment