我想从facebook http://connect.facebook.net/en_US/all.js
中获取javascript文件我工作的组织有一个阻止访问Facebook的防火墙,它只是进入一个html页面,上面写着“访问被拒绝等等等等”
我希望能够放置一个javascript src标记<script src="http://... "> </script>
,并在浏览器尝试将html评估为javascript时检测并禁止警告。
任何人都知道怎么做?
答案 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>