Я пытался ответить больше, но он не работает для меня.У меня были проблемы с тем же clientWidth с сафари по сравнению с другими браузерами, и этот код решил проблему:
var get_safe_value = function(elm,callback){
var sty = elm.style
sty.transform = "translateZ(1px)";
var ret = callback(elm)//you can get here the value you want
sty.transform = "";
return ret
}
// for safari to have the good clientWidth
var $fBody = document.body //the element you need to fix
var clientW = get_safe_value($fBody,function(elm){return $fBody.clientWidth})
Это действительно странно, потому что, если я пытаюсь снова получить clientWidth после get_safe_value, я получаю плохойзначение с safari, получатель должен быть между sty.transform = "translateZ(1px)";
и sty.transform = "";
Другое решение, которое работает окончательно, это
var $fBody = document.body //the element you need to fix
$fBody.style.display = 'none';
var temp = $.body.offsetHeight;
$fBody.style.display = ""
temp = $.body.offsetHeight;
var clientW = $fBody.clientWidth
Проблема в том, что вы теряете состояния фокуса и прокрутки.