when script error, throw an error in advance instead of waitting the callback in timer
script = document.createElement('script');
script.src = url;
// add onerror
script.onerror = function() {
cleanup();
if (fn) fn(new Error('Failure'));
}
target.parentNode.insertBefore(script, target);