我页面上的脚本在FireFox中导致无限循环。
这是Javascript:
var Cacaoweb = {
version: "2.11",
timerTasksInterval: 0.5,
lasttimeclientrunning: null,
isclientrunningHysteresisInterval: 30000,
timeoutClientAlive: 2000,
timeStart: (new Date()).getTime(),
status: 'Unknown',
myFunc: null,
videowidth: 640,
videoheight: 360,
autoplay: true,
/**
* Lance le téléchargement de cacaoweb en fonction de la plateforme de l'utilisateur
*/
download: function() {
var platform = "Windows";
if ( navigator.platform != null ) {
if ( navigator.platform.indexOf( "Win32" ) != -1 ) {
platform = "Windows";
} else if ( navigator.platform.indexOf( "Win64" ) != -1 ) {
platform = "Windows";
} else if ( navigator.platform.indexOf( "Win" ) != -1 ) {
platform = "Windows";
} else if ( navigator.platform.indexOf( "Linux" ) != -1 ) {
platform = "Linux";
} else if ( navigator.platform.indexOf( "Mac" ) != -1 && navigator.platform.indexOf( "Intel" ) != -1 ) {
platform = "Mac OSX Intel";
} else if ( navigator.platform.indexOf( "Mac" ) != -1 && navigator.platform.indexOf( "PPC" ) != -1 ) {
platform = "Mac OSX PPC";
} else if ( navigator.platform.indexOf( "Mac" ) != -1 ) {
platform = "Mac OSX" ;
} else
platform = navigator.platform;
}
var uri;
if (platform == "Windows"){
uri = "http://www.sourceforge.net/projects/cacaoweb/files/cacaoweb.exe/download";
} else if (platform == "Mac OSX" || platform == "Mac OSX Intel") {
uri = "http://www.sourceforge.net/projects/cacaoweb/files/cacaoweb.dmg/download";
} else if (platform == "Linux") {
uri = "http://www.sourceforge.net/projects/cacaoweb/files/cacaoweb.linux/download";
} else {
alert("cacaoweb is not available for your platform");
}
setTimeout(function() { window.location.href = uri; }, 0 ); // timeout could be 500 in case of direct download to make the user at ease
},
/**
* Inclut le script 'filename' en utilisant l'id 'scriptname'
* Supprime les précédents scripts insérés avec la même id 'scriptname'
*
* @param filename Nom du fichier JS à inclure
* @param scriptname Id du script inclus
*/
includeScript: function(filename, scriptname){
var htmlDoc = document.getElementsByTagName('body').item(0);
var scriptblock = document.getElementById(scriptname);
if (scriptblock) {
htmlDoc.removeChild(scriptblock);
}
var script = document.createElement("script");
script.id = scriptname;
script.src = filename;
script.language = 'javascript';
script.type = 'text/javascript';
htmlDoc.appendChild(script);
},
/**
* Permet de spécifier une fonction qui sera appelée régulièrement ou lorsque le status de cacaoweb change (On, Off ou Unknown)
* La fonction doit prendre un argument (qui sera le statut de cacaoweb)
* ATTENTION: ne marche qu'avec une fonction maximum
*/
subscribeStatusChange: function(myFunc) {
this.myFunc = myFunc;
},
unsubscribeStatusChange: function() {
this.myFunc = null;
},
/**
* Met à jour le statut de cacaoweb.
* On si cacaoweb tourne sur la machine
* Off si cacaoweb ne tourne pas sur la machine
* Unknown si le statut n'a pas encore été initialisé ou s'il n'a plus été mis à jour depuis un certain délai
*/
updateStatusVariable: function() {
if ((new Date()).getTime() - this.lasttimeclientrunning < this.timeoutClientAlive + this.isclientrunningHysteresisInterval) {
this.status = 'On';
} else if ((new Date()).getTime() - this.timeStart < 2000) {
this.status = 'Unknown';
} else {
this.status = 'Off';
}
},
/**
* Toutes les actions à effectuer à chaque fois qu'il peut y avoir un changement dans le statut
*/
updateActions: function() {
this.updateStatusVariable();
if (this.myFunc != null) {
this.myFunc(this.status);
}
},
/**
* Vérifie et met à jour à jour le statut de cacaoweb
*/
checkStatus: function() {
if (this.lasttimeclientrunning == null || (new Date()).getTime() - this.lasttimeclientrunning > this.isclientrunningHysteresisInterval) {
var i = Math.floor(Math.random() * 1000000);
this.lasttimeclientrunning = 0;
this.includeScript('http://127.0.0.1:4001/isrunning?unique=' + i, 'isrunningscript');
}
this.updateActions();
},
/**
* Fonction appelée en callback de checkInstalled (par le client cacaoweb s'il est en route)
*/
callbackIsRunning: function() {
Cacaoweb.lasttimeclientrunning = (new Date()).getTime();
this.updateActions();
},
playvideo: function(o, width, height) {
var link = o.getAttribute("link");
var player = '<object width="' + width + '" height="' + height + '">';
player += '<param name="allowFullScreen" value="true" />';
player += '<param name="flashvars" value="file=' + link + '" />';
player += '<param name="movie" value="http://127.0.0.1:4001/player.swf" />';
player += '<embed src="http://127.0.0.1:4001/player.swf" ';
player += 'flashvars="file=' + link + '" ';
player += 'width="' + width + '" height="' + height + '" allowFullScreen="true" />';
player += '</object>';
o.innerHTML = player;
},
insertAllVideos: function() {
var all = document.getElementsByTagName("cacao");
for (var i = 0; i < all.length; i++) {
this.playvideo(all[i], this.videowidth, this.videoheight);
}
},
insertDownloadPlugin: function() {
var all = document.getElementsByTagName("cacao");
for (var i = 0; i < all.length; i++) {
all[i].innerHTML = '<a href="javascript:Cacaoweb.download()"><img src="http://streaming.fortechlovers.com/wp-content/uploads/2011/02/5.png" /></a>';
}
},
/**
* On joue les vidéos de la page en attendant 2s pour voir si cacaoweb est en route, sinon on affiche une image de téléchargement
*/
checkandplay: function() {
if (this.status == 'On') {
this.insertAllVideos();
} else {
var timeout = setTimeout("Cacaoweb.insertDownloadPlugin()", this.timeoutClientAlive);
this.subscribeStatusChange(function (status) {
if (status == "On") {
clearTimeout(timeout);
this.unsubscribeStatusChange();
this.insertAllVideos();
}
});
}
}}
setInterval(function() { Cacaoweb.checkStatus(); }, Cacaoweb.timerTasksInterval * 1000);
IE或Chrome中没有问题。但由于某种原因,函数在FF中无限循环。因此函数中的某些东西导致它在Firefox中循环。
我不知道是什么?
这是the page
答案 0 :(得分:1)
我没有看到无限循环(如果有的话,firefox会提示我并提供停止脚本的选项)。
但http://127.0.0.1:4001/isrunning有很多无用的(?)请求(如jomanlk所说)。
你应该解决这个问题,我确信我的本地主机没有任何答案,我不知道你在那里期待什么。