refactor 3-more into separate books
This commit is contained in:
parent
bd1d5e4305
commit
87639b2740
423 changed files with 9 additions and 9 deletions
83
4-ajax/12-ajax-iframe/date-comet.view/iframeComet.js
Normal file
83
4-ajax/12-ajax-iframe/date-comet.view/iframeComet.js
Normal file
|
@ -0,0 +1,83 @@
|
|||
|
||||
var IframeComet = new function() {
|
||||
var self = this;
|
||||
|
||||
var connectTries = 0, reconnectTimer;
|
||||
var htmlfile; // for ie only
|
||||
var iframe;
|
||||
|
||||
this.onConnected = function() {
|
||||
connectTries = 0;
|
||||
clearTimeout(reconnectTimer);
|
||||
};
|
||||
|
||||
this.onMessage = function(message) { /* ... */ };
|
||||
|
||||
this.onError = function(err) { /* ... */ };
|
||||
|
||||
this.open = function(url) {
|
||||
connectTries++;
|
||||
|
||||
if(connectTries > 3) {
|
||||
self.onError("Unable to connect");
|
||||
}
|
||||
|
||||
if ("ActiveXObject" in window) { // IE
|
||||
createActiveXFrame(url);
|
||||
} else {
|
||||
createIframe(url);
|
||||
}
|
||||
|
||||
reconnectTimer = setTimeout(function() {
|
||||
if (!self.isConnected()) {
|
||||
self.open(url);
|
||||
}
|
||||
}, connectTries * 2000);
|
||||
|
||||
// в Chrome не срабатывает при обрыве соединения,
|
||||
// так что используем там другой =) транспорт
|
||||
iframe.onload = function() {
|
||||
self.open(url);
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
this.isConnected = function() {
|
||||
return connectTries == 0; // onConnect обнуляет connectTries
|
||||
}
|
||||
|
||||
function cleanIframe() {
|
||||
if (iframe) {
|
||||
iframe.src = "javascript:false";
|
||||
iframe.parentNode.removeChild(iframe); // очистка
|
||||
}
|
||||
}
|
||||
|
||||
function createIframe(src) {
|
||||
cleanIframe();
|
||||
|
||||
iframe = document.createElement('iframe');
|
||||
iframe.src = src || 'javascript:false';
|
||||
iframe.style.display = 'none';
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
}
|
||||
|
||||
|
||||
function createActiveXFrame(src) {
|
||||
cleanIframe();
|
||||
|
||||
if (!htmlfile) {
|
||||
htmlfile = new ActiveXObject("htmlfile");
|
||||
htmlfile.open();
|
||||
htmlfile.write("<html><body></body></html>");
|
||||
htmlfile.close();
|
||||
htmlfile.parentWindow.IframeComet = self;
|
||||
}
|
||||
|
||||
src = src || 'javascript:false'; // пустой src
|
||||
htmlfile.body.insertAdjacentHTML('beforeEnd', "<iframe src='"+src+"'></iframe>");
|
||||
iframe = htmlfile.body.lastChild; // window in .document.parentWindow
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue