Safari browser compatibility issue

I have a local HTML file used to display mixed content with images and text. Here's the issue: the same file displays everything correctly in Google Chrome, showing both images and text as expected. However, when opened in Safari, only the text is shown—images are missing, which is very strange.

Interestingly, if I remove .png from the title attribute of the <img> tag, the images show up properly in Safari. Alternatively, if I comment out the inclusion of html2canvas.min.js, the images also display correctly (although the layout breaks without it).

I'm not sure if this is a Safari-specific issue. Can anyone explain what might be causing this problem?

<!doctype html> <html lang="zh"> <head> <meta charset="gbk"> <title>watermark</title> <script type="text/javascript" src="./js/jquery.js"></script> <script type="text/javascript" src="./js/watermark/html2canvas.min.js"></script> <script type="text/javascript" src="./js/watermark/jquery.watermark.js"></script> </head> <body> <style> #PreviewInfo { position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 999; }

#htmlHiddenDiv {
    position: absolute;
    bottom: 50px;
    left: 10px;
    z-index: 10;
}

#htmlHiddenDiv p {
    margin-bottom: 0;
}

#htmlHiddenDiv em {
    font-style: italic !important;
}

#htmlHiddenDiv strong, #htmlHiddenDiv b {
    font-weight: 700 !important;
}

</style> <div id="PreviewInfo">

</div> <div id="htmlHiddenDiv">

<p>测试水印效果<img src="data:image/png;base64,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" title="1743059680388967.png" alt="6662025-03-27 14.15.35.png"/></p> </div> </body> <script> function setDate () { setBuiltLabel('Date',''); setBuiltLabel('Time',''); setBuiltLabel('PrintEventID',''); } function setBuiltLabel (labelStr,valStr) { var result = false; var classStr = document.getElementsByClassName(labelStr); if (classStr.length != 0) {

        var classS = classStr.length;
        for (var i=0;i<classS;i++) {
            
            if (labelStr == 'Time') {
            
                valStr = getNowTime();
            }
            if (labelStr == 'Date') {
                
                valStr = getNowDate();
            }
			if (labelStr == 'PrintEventID') {
                value = JsGetPrintEventID();
				if(value.length == 0)
					valStr = '00000000000000000000';
				else
					valStr = value;
            }
            classStr[i].innerHTML = valStr;
        }
    } 
}
function getNowTime(){
    var newDate = new Date();
    var hour = newDate.getHours();
    hour = hour < 10 ? "0" + hour : hour;
    var minute = newDate.getMinutes();
    minute = minute < 10 ? "0" + minute : minute;
    var second = newDate.getSeconds();
    second = second < 10 ? "0" + second : second;
    return hour + ':' + minute;
}
function getNowDate(){
    var newDate = new Date();
    var year = newDate.getFullYear();
    var month = newDate.getMonth() + 1;
    month = month < 10 ? "0" + month : month;
    var day = newDate.getDate();
    day = day < 10 ? "0" + day : day;
    return year + '/' + month + '/' + day;
}
$(function () {

var TransparencyText = 100; var Slope =-20; var Layout = 'Tile' var LineSpacing = 50; var ColumnSpacing = 50; var gravityVal = 'c'; if (Layout === 'Center') { gravityVal = 'c'; }

    setDate();
    setInterval("setDate()",500);
    if ($("#htmlHiddenDiv img").length > 0) {
        $("#htmlHiddenDiv img").each(function () {
            var maxWidth = 2200, maxHeight = 2200; 
            var w = $(this).width(), h = $(this).height();
            var w_original = w, h_original = h;
            if (w > maxWidth) {
                h = h * (maxWidth / w);
                w = maxWidth;
                if (h > maxHeight) {
                    w = w_original * (maxHeight / h_original);
                    h = maxHeight;
                }
            } else if (h > maxHeight) {
                w = w * (maxHeight / h);
                h = maxHeight;
                if (w > maxWidth) {
                    h = h_original * (maxWidth / w_original);
                    w = maxWidth;
                }
            }
            $(this).css("cssText", "width:" + w + "px !important;height:" + h + "px !important");
        });
    }
    var reg = /^[0-9]*[1-9][0-9]*$/;
    TransparencyText = TransparencyText / 100;
    if (Layout == 'Tile') {
        LineSpacing = !reg.test(LineSpacing) ? 50 : LineSpacing;
        ColumnSpacing = !reg.test(ColumnSpacing) ? 50 : ColumnSpacing;
        html2canvas(document.getElementById("htmlHiddenDiv"), {
            onrendered: function (canvas) {
                $('#htmlHiddenDiv').html('');
                var dataURL = canvas.toDataURL("image/png");
                $('#PreviewInfo').watermark({
                    path: dataURL,
                    width: parseInt(ColumnSpacing), 
                    height: parseInt(LineSpacing), 
                    textRotate: parseFloat(Slope),
                    opacity: parseFloat(TransparencyText),
                    type: 'Tile',
                    callback: function () {
                    }
                });
            }
        });
    } else {
        html2canvas(document.getElementById("htmlHiddenDiv"), {
            onrendered: function (canvas) {
                $('#htmlHiddenDiv').html('');
                var dataURL = canvas.toDataURL("image/png");
                $('#PreviewInfo').watermark({
                    path: dataURL,
                    textRotate: parseFloat(Slope),
                    opacity: parseFloat(TransparencyText),
                    gravity: gravityVal,
                    type: '',
                    callback: function () {
                    }
                });
            }
        });
    }
})

</script> </html>

All of the above are HTML and JS files. Due to platform limitations, I changed the file extensions to .txt.

Safari browser compatibility issue
 
 
Q