From a34324c5a2bda4c55546a6cacd96cbb59cf2ae91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20D=C3=B6ring?= <simon.doering@stud.hs-bochum.de> Date: Tue, 5 Jan 2021 14:38:21 +0100 Subject: [PATCH] Fix bug that crashed noVNC when noVNC canvas was null --- novnc/app/camera-receiver.js | 64 +++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/novnc/app/camera-receiver.js b/novnc/app/camera-receiver.js index 48f342b..12d253b 100644 --- a/novnc/app/camera-receiver.js +++ b/novnc/app/camera-receiver.js @@ -408,36 +408,40 @@ document.addEventListener('DOMContentLoaded', function() { function adjustVideoGeometry() { var canvas = document.querySelector('canvas'); - var canvasRect = canvas.getBoundingClientRect(); - var vncWidth = canvas.width; - var vncHeight = canvas.height; - var canvasWidth = canvasRect.width; - var canvasHeight = canvasRect.height; - var canvasX = canvasRect.x; - var canvasY = canvasRect.y - if ( - vncWidth !== previousCanvasGeometryState.vncWidth || - vncHeight !== previousCanvasGeometryState.vncHeight || - canvasWidth !== previousCanvasGeometryState.canvasWidth || - canvasHeight !== previousCanvasGeometryState.canvasHeight || - canvasX !== previousCanvasGeometryState.canvasX || - canvasY !== previousCanvasGeometryState.canvasY - ) { - Object.keys(videoGeometryParams).forEach(function(slot) { - if (videoActiveGeometry[slot] === 'set_geometry_relative_to_canvas') { - var params = videoGeometryParams[slot]; - handleSetGeometryRelativeToCanvas( - document.getElementById('camera-feed-' + slot), - slot, - params.origin, - params.x, - params.y, - params.w, - params.h, - params.z - ); - } - }); + if (canvas) { + var canvasRect = canvas.getBoundingClientRect(); + var vncWidth = canvas.width; + var vncHeight = canvas.height; + var canvasWidth = canvasRect.width; + var canvasHeight = canvasRect.height; + var canvasX = canvasRect.x; + var canvasY = canvasRect.y + if ( + vncWidth !== previousCanvasGeometryState.vncWidth || + vncHeight !== previousCanvasGeometryState.vncHeight || + canvasWidth !== previousCanvasGeometryState.canvasWidth || + canvasHeight !== previousCanvasGeometryState.canvasHeight || + canvasX !== previousCanvasGeometryState.canvasX || + canvasY !== previousCanvasGeometryState.canvasY + ) { + Object.keys(videoGeometryParams).forEach(function(slot) { + if (videoActiveGeometry[slot] === 'set_geometry_relative_to_canvas') { + var params = videoGeometryParams[slot]; + handleSetGeometryRelativeToCanvas( + document.getElementById('camera-feed-' + slot), + slot, + params.origin, + params.x, + params.y, + params.w, + params.h, + params.z + ); + } + }); + } + } else { + console.error('adjustVideoGeometry canvas was null'); } } }); -- GitLab