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
|
||||
}
|
||||
|
||||
}
|
27
4-ajax/12-ajax-iframe/date-comet.view/index.html
Normal file
27
4-ajax/12-ajax-iframe/date-comet.view/index.html
Normal file
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<script src="iframeComet.js"></script>
|
||||
|
||||
<button onclick="go()">IframeComet.open("comet");</button>
|
||||
|
||||
|
||||
<div id="showElem"></div>
|
||||
|
||||
<script>
|
||||
|
||||
IframeComet.onMessage = IframeComet.onError = show;
|
||||
|
||||
function show(msg) {
|
||||
showElem.innerHTML = msg;
|
||||
}
|
||||
|
||||
function go() {
|
||||
IframeComet.open("comet");
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
42
4-ajax/12-ajax-iframe/date-comet.view/server.js
Normal file
42
4-ajax/12-ajax-iframe/date-comet.view/server.js
Normal file
|
@ -0,0 +1,42 @@
|
|||
|
||||
var http = require('http');
|
||||
var url = require('url');
|
||||
var static = require('node-static');
|
||||
var file = new static.Server('.', { cache: 0 });
|
||||
|
||||
|
||||
function accept(req, res) {
|
||||
|
||||
if (req.url == '/comet') {
|
||||
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
|
||||
|
||||
res.write('<!DOCTYPE HTML><html> \
|
||||
<head><meta junk="'+new Array(2000).join('*')+'"/> \
|
||||
<script> \
|
||||
var i = parent.IframeComet; \
|
||||
i.onConnected()</script> \
|
||||
</head><body>');
|
||||
|
||||
setInterval(function() {
|
||||
var now = new Date();
|
||||
var timeStr = now.getHours()+':'+now.getMinutes()+':'+now.getSeconds();
|
||||
res.write('<script>i.onMessage("'+timeStr+'")</script>');
|
||||
}, 1000);
|
||||
|
||||
return;
|
||||
} else {
|
||||
file.serve(req, res);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ------ запустить сервер -------
|
||||
|
||||
if (!module.parent) {
|
||||
http.createServer(accept).listen(8080);
|
||||
} else {
|
||||
exports.accept = accept;
|
||||
}
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue