javascriptbitrix

Blocking JavaScript code execution on page until image onerror event


I have a very interesting task:

I have few "images" like that:

var image = new Image();
image.src='https://www.hootv.lt/bitrix/spread.php?s=QklUUklYX1NNX1VJREgBbjVkZXNEQ2IzVnU4ckRSSmlCbW82R0xKdmNWcUV2UzUBMAEvAQExATECQklUUklYX1NNX1VJREwBMzcwNjU0NTQyMDcBMAEvAQExATECQklUUklYX1NNX1VJREQBMjVwbmJzNjNkY2VrNGRuZ2VmaGEyYXZsMm1taGh6YWMBMTcyNjMzNjUzMAEvAQExATECQklUUklYX1NNX05DQwFZATE3MjYzMzY1MzABLwEBAQJCSVRSSVhfU01fQ0MBATABLwEBAQI%3D&k=c545bd21253d81d854fc3698d4b20854';

An image src is a PHP page which returns nothing. I have to check whenever all images generate error, than continue executing script.

So my script should look like something like that:

<script> - My code
var image = new Image();
image.src='url1';

var image = new Image();
image.src='url2';

var image = new Image();
image.src='url3';

...

var image = new Image();
image.src='url33';
</script>

(after all images generate onerror event continue with)

<script> - CMS generated code I cannot change
windows.location.href = "..."; (i cannot change line, all I can do is inject the script above)
</script>

I tried the following but obviously it's not working:

while (!image.error) {
  //wait
}

Solution

  • First of all I would like to say big thanks to @CherryDT and @AztecCodes for being so involved in my problem!

    It seems like the problem I faced doesn't have a straightforward solution so I ended up modifying CMS source code for my needs.

            var srcs = [
            ...
            ];
            var promises = [];
            $.each(srcs, function(key, src) {
                promises.push(new Promise(function(resolve) {
                    var image = new Image();
                    image.src = src;
                    image.onerror = function() {
                        resolve();
                    }
                }));
            });
            $.when.apply($, promises).then(function() {
                //redirect here
            });