检测并抑制加载javascript文件的错误

时间:2010-09-03 19:49:23

标签: javascript

我想从facebook http://connect.facebook.net/en_US/all.js

中获取javascript文件

我工作的组织有一个阻止访问Facebook的防火墙,它只是进入一个html页面,上面写着“访问被拒绝等等等等”

我希望能够放置一个javascript src标记<script src="http://... "> </script>,并在浏览器尝试将html评估为javascript时检测并禁止警告。

任何人都知道怎么做?

7 个答案:

答案 0 :(得分:4)

看起来jQuery.getScript就像你提到的那样。或者您可以手动执行:

$.ajax({
  url: url,
  dataType: 'script',
  success: function(){document.write('<script src="http://... "> </script>');}
});

使用<script></script>标记附加您的html成功加载。

答案 1 :(得分:2)

使用标准<script>标记,这是不可能的。当脚本的src被命中并且内容被下载时,没有什么真正运行,所以你不能将它包装在try / catch块中。关于如何动态加载脚本有一些提示here。也许浏览器会将一些东西添加到你可以检查的DOM元素中。

答案 2 :(得分:2)

这是一种解决方法,而不是直接的答案,但您可以在Facebook的防火墙外设置reverse proxy并从那里加载脚本。它不会更优雅地失败,而是让脚本不会失败。

答案 3 :(得分:2)

试试这个,看看它是否适合你:

<script type="text/javascript" onerror="throw('An error occurred')" src="http://connect.facebook.net/en_US/all.js"></script>

或者,如果您有权访问代理脚本来获取外部内容,我会通过xmlHttpRequest使用它来获取JS内容。如果成功,eval内容(是的, eval 是邪恶的,我知道)。

我想补充一点,如果你知道JS会失败,那为什么要打扰?

答案 4 :(得分:0)

为什么不以非常简单的方式做到这一点?:

if(!window.FB) { // or (typeof window.FB === "undefined")
    alert ("ERROR: http://connect.facebook.net/en_US/all.js is not loaded");
}
if(!window.jQuery) { // or (typeof window.jQuery === "undefined")
    alert ("ERROR: jQuery is not loaded");
}
// and so on

答案 5 :(得分:0)

请尝试下面的功能,只有在脚本加载后才会调用onload_function。您可以设置超时以取消脚本。

function include_js(url, onload_function) { 
    var script = document.createElement("script");
    script.type = "text/javascript";

    if (script.readyState) { 
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" || script.readyState == "complete"){
                script.onreadystatechange = null;
                onload_function();
            }
        };
    } else {  
        script.onload = function(){
            onload_function();
        };
    }
    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

答案 6 :(得分:0)

在Firefox和IE中,您应该可以使用window.onerror来实现此目的。您可以利用以下事实:脚本按照HTML中列出的顺序运行,以便围绕facebook脚本包装错误处理程序:

<script>
// Remember old error handler, if there is one.
var oldOnError = window.onerror;
// Special error handler for facebook script
window.onerror = function(message, url, linenumber) {
  // Potentially alert the user to problem
  alert('Problem with facebook: ...');
  // Return true to suppress default error handling
  return true;
}
</script>

<!-- Load facebook script -->
<script src="http://connect.facebook.net/en_US/all.js"></script>

<script>
// Remove error handler for facebook script
window.onerror = oldOnError;
</script>