Al mirar el SDK de Facebook, parece que se inyecta de forma asincrónica insertando un elemento de script en el encabezado. Esto significa que todo lo que tiene que hacer es crear el controlador de devolución de llamada y si Facebook está bloqueado, nunca se llamará. No deberías obtener ningún error de script del navegador. Por lo que debe ser capaz de hacer algo como:
<div id="fb-root"></div>
<script>
var FACEBOOK_BLOCKED = true;
window.fbAsyncInit = function() {
FACEBOOK_BLOCKED = false;
FB.init({
appId : 'YOUR_APP_ID', // App ID
channelURL : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // enable OAuth 2.0
xfbml : true // parse XFBML
});
// Additional initialization code here
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
Para un caso de uso más general, un enfoque similar funciona con cualquier secuencia de comandos que se puede llamar utilizando un enfoque JSON-P. Esto, por supuesto, requiere que el servidor tiene una función de devolución de llamada como parámetro (o automáticamente llama a un pre-llamada función):
// Load some SDK Asynchronously
(function(d){
var js = d.createElement('script');
js.src = "http://www.example.com?callback=myfunc";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
var SCRIPT_LOADED = false;
var myfunc = function() {
SCRIPT_LOADED = true;
}
ACTUALIZACIÓN
encontré con this método, es posible que desee a darle un tiro:
function loadScript(sScriptSrc, oCallback) {
var oHead = document.getElementById('head')[0];
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.src = sScriptSrc;
// most browsers
oScript.onload = oCallback;
// IE 6 & 7
oScript.onreadystatechange = function() {
if (this.readyState == 'complete') {
oCallback();
}
}
oHead.appendChild(oScript);
}
pregunta similar: http://stackoverflow.com/questions/2027849/how-to-trigger-script-onerror-in-internet-explorer/2032014#2032014 – Ktash
Dos de las otras respuestas en la pregunta @Kt las menciones de cenizas también pueden ser útiles para otros: http://stackoverflow.com/questions/2027849/how-to-trigger-script-onerror-in-internet-explorer/2027892#2027892 usa window.onerror y http: // stackoverflow .com/questions/2027849/how-to-trigger-script-onerror-in-internet-explorer/8066204 # 8066204 usa onload. – ToolmakerSteve