В окне просмотра svg увеличено состояние (ширина svg больше, чем ширина окна просмотра). Неверное свойство layerX события click для внешнего объекта в Safari и Chrome. В следующем пример щелкните по центру желтого прямоугольника и посмотрите вывод консоли.
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width">
<title>JS Bin</title>
</head>
<body style = "margin:0">
<svg viewBox = "0 0 200 200" style = "height: 400px; width: 400px;" xmlns = "http://www.w3.org/2000/svg">
<rect width = "100%" height = "100%" fill = "red"/>
<foreignObject x = "50" y = "50" width = "100" height = "100">
<div style = "background-color: yellow; width: 100px; height:100px;">
</div>
</foreignObject>
</svg>
</body>
</html>
Попробуйте на хроме, сафари и фаерфоксе. Обратите внимание, что вы получите разные результаты в каждом браузере. Результаты хрома и сафари бессмысленны, а Firefox вычисляет без учета состояния области просмотра. Есть ли обходной путь для этой проблемы?





Хитрость заключается в том, чтобы не использовать layerX , вместо этого используйте
event.clientX - rect1.getBoundingClientRect().left
Я обновил пример, чтобы он работал правильно. Теперь я получаю стабильный результат среди Chrome, Firefox и Safari.
layerX нестандартен. Вы должны использовать что-то другое. developer.mozilla.org/en-US/docs/Web/API/UIEvent/layerX