Si vous êtes un utilisateur chevronné du GPS sur votre smartphone et autres applications de géolocalisation, vous serez sûrement intéressé de savoir si votre smartphone est compatible avec les nouveaux satellites européens de géolocalisation. Galileo est un projet de système de positionnement par satellites qui peut être utilisé dans les transports maritimes, aériens et terrestres, les opérations de secours et de sauvetage, les travaux publics, la prospection pétrolière, l'
bottom of page
(function(){
if (window.__cnJeuxScoreHudV1) return;
window.__cnJeuxScoreHudV1 = true;
var state = { score: 'Score: 0', best: 'Best: ' + (localStorage.getItem('carrementnous_dodge_ball_best_score') || localStorage.getItem('bestScore') || '0') };
function isJeuxPage(){
return //jeux(?:$|[?#/])/.test(window.location.pathname + window.location.search + window.location.hash);
}
function gameIframe(){
return document.querySelector('iframe[title="GAME DODGE BALL"]');
}
function ensureHud(){
var hud = document.getElementById('cn-game-score-hud');
if (!hud) {
hud = document.createElement('div');
hud.id = 'cn-game-score-hud';
hud.innerHTML = '';
document.body.appendChild(hud);
var s = hud.style;
s.position = 'fixed';
s.zIndex = '999999';
s.display = 'none';
s.alignItems = 'center';
s.justifyContent = 'space-between';
s.gap = '8px';
s.boxSizing = 'border-box';
s.pointerEvents = 'none';
s.color = '#fff';
s.background = 'rgba(0,0,0,.78)';
s.border = '1px solid rgba(255,255,255,.55)';
s.borderRadius = '4px';
s.padding = '3px 6px';
s.fontFamily = 'monospace';
s.fontWeight = '800';
s.lineHeight = '1.1';
s.textShadow = '0 1px 2px #000';
}
var left = hud.querySelector('.cn-score-left');
var right = hud.querySelector('.cn-score-right');
if (left) left.textContent = state.score.replace('Score:', 'Score :');
if (right) right.textContent = state.best.replace('Best:', 'Best :');
return hud;
}
function positionHud(){
var hud = ensureHud();
if (!isJeuxPage()) {
hud.style.display = 'none';
return;
}
var iframe = gameIframe();
if (!iframe) {
hud.style.display = 'none';
return;
}
var canvasRect = null;
var frameWidth = 0;
try {
var doc = iframe.contentDocument;
var canvas = doc && doc.getElementById('game');
if (canvas) {
var cr = canvas.getBoundingClientRect();
canvasRect = { x: cr.x, y: cr.y, width: cr.width, height: cr.height };
frameWidth = iframe.contentWindow.innerWidth || 0;
}
} catch (e) {}
if (!canvasRect || !frameWidth) {
hud.style.display = 'none';
return;
}
var ir = iframe.getBoundingClientRect();
var scale = ir.width / frameWidth;
var leftPos = ir.left + canvasRect.x * scale;
var topPos = ir.top + canvasRect.y * scale + 3;
var width = canvasRect.width * scale;
hud.style.display = 'flex';
hud.style.left = Math.round(leftPos) + 'px';
hud.style.top = Math.round(topPos) + 'px';
hud.style.width = Math.round(width) + 'px';
hud.style.height = Math.max(18, Math.round(24 * Math.min(1, Math.max(.78, scale + .28)))) + 'px';
hud.style.fontSize = Math.max(10, Math.min(13, Math.round(width / 16))) + 'px';
}
function injectScoreBridge(){
if (!isJeuxPage()) return false;
var iframe = gameIframe();
if (!iframe) return false;
try {
var win = iframe.contentWindow;
if (!win || win.__cnScorePostPatchV1) return true;
if (!win.CanvasRenderingContext2D) return false;
win.__cnScorePostPatchV1 = true;
var proto = win.CanvasRenderingContext2D.prototype;
var originalFillText = proto.fillText;
proto.fillText = function(text, x, y, maxWidth){
try {
var txt = String(text || '');
if (/^Score:/i.test(txt)) win.parent.postMessage({ type: 'cnDodgeScoreHud', score: txt }, '*');
if (/^Best:/i.test(txt)) win.parent.postMessage({ type: 'cnDodgeScoreHud', best: txt }, '*');
} catch (e) {}
return originalFillText.apply(this, arguments);
};
return true;
} catch (e) {
return false;
}
}
window.addEventListener('message', function(e){
if (!e.data || e.data.type !== 'cnDodgeScoreHud') return;
if (e.data.score) state.score = e.data.score;
if (e.data.best) state.best = e.data.best;
positionHud();
});
function tick(){
injectScoreBridge();
positionHud();
}
window.addEventListener('resize', positionHud, { passive: true });
window.addEventListener('scroll', positionHud, { passive: true });
setInterval(tick, 500);
setTimeout(tick, 250);
setTimeout(tick, 1000);
setTimeout(tick, 2500);
})();