Nhìn vào SDK facebook, có vẻ như nó được chèn không đồng bộ bằng cách chèn phần tử tập lệnh vào đầu. Điều này có nghĩa là tất cả những gì bạn phải làm là tạo trình xử lý gọi lại và nếu facebook bị chặn thì điều đó sẽ không bao giờ được gọi. Bạn không nên nhận bất kỳ lỗi tập lệnh trình duyệt nào. Vì vậy, bạn sẽ có thể làm điều gì đó như:
<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>
Đối với một trường hợp sử dụng tổng quát hơn, một cách tiếp cận tương tự sẽ làm việc với bất kỳ kịch bản mà bạn có thể gọi sử dụng một cách tiếp cận JSON-P. Điều này, tất nhiên, đòi hỏi rằng các máy chủ có một chức năng gọi lại như một tham số (hoặc tự động gọi một pre-tên chức năng):
// 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;
}
CẬP NHẬT
Chỉ cần đi qua this phương pháp, bạn có thể muốn để cung cấp cho nó một shot:
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);
}
Nguồn
2011-11-20 22:51:59
câu hỏi tương tự: http://stackoverflow.com/questions/2027849/how-to-trigger-script-onerror-in-internet-explorer/2032014#2032014 – Ktash
Hai trong số các các câu trả lời khác trong câu hỏi @Kt đề cập tro cũng có thể hữu ích cho những người khác: http://stackoverflow.com/questions/2027849/how-to-trigger-script-onerror-in-internet-explorer/2027892#2027892 sử dụng window.onerror và http: // stackoverflow .com/questions/2027849/how-to-trigger-script-onerror-in-internet-explorer/8066204 # 8066204 sử dụng onload. – ToolmakerSteve