getBoundingClientRect没有返回大小调整信息iOS8

时间:2014-09-14 14:38:33

标签: javascript uiwebview ios8

在iOS的UIWebView中,iframe中的div会被查询。对于每个div,我提取属性以及div的顶部,底部,左侧,右侧,宽度和高度。

<div class="x" id="1234" data-type="web"
     data-href="http://x.com/foo?bar=z"></div>

JS:

var divs = iframe['contentDocument'].getElementsByClassName('x');
return [].map.call(divs, function (div) {
    return _.extend(div.getBoundingClientRect(), {
      id: div['id'],
      href: div['dataset']['href'],
      type:  div['dataset']['type']
});

这在iOS 6和iOS 7中运行良好,并且存在所有数据,包括来自getBoundingClientRect的大小调整数据。在iOS 8中,getBoundingClientRect仅返回一个空对象,但返回div的id和数据集字段。任何想法为什么或如何让它工作?

1 个答案:

答案 0 :(得分:1)

我发现您不能以类似字典的方式访问返回的ClientRect的属性:

document.querySelector("#link").getBoundingClientRect()["left"] // Does not work
document.querySelector("#link").getBoundingClientRect().left    // Does work

或者,作为立即执行的功能:

(function() {
  var element = document.querySelector('#link');
  var rect = element.getBoundingClientRect();
  return { left: rect.left, top: rect.top, width: rect.width, height: rect.height }; 
})()

此实现适用于iOS 7和iOS 8。