【问题标题】:How can I work around the iframe scaling bug in chrome 10?如何解决 chrome 10 中的 iframe 缩放错误?
【发布时间】:2011-07-06 19:02:24
【问题描述】:

供参考:http://code.google.com/p/chromium/issues/detail?id=71937

基本上,问题在于,如果您缩放 iframe,则 iframe 的 contentWindow 的边界会应用两次缩放修饰符。因此,例如,如果您将 100x100 的 iframe 缩放 50% (style="-webkit-transform: scale(0.5, 0.5);"),新的 iframe 边界将为 50x50,但 contentWindow 边界将为 25x25。实际内容已正确缩放。

我尝试设置 iframe contentWindow 的 innerHeight/innerWidth,虽然我能够更新属性,但 contentWindow 的可见边界没有改变。

欢迎任何意见,谢谢!

【问题讨论】:

标签: html iframe google-chrome css


【解决方案1】:

对于将来偶然发现此错误的任何人。我通过将缩放转换应用于 iframe 内文档的 html 节点而不是 iframe 本身来解决它。我使用了以下代码:

$(function() {
    $("#iframe_name").load(function() {
        $("#iframe_name").contents().find('html').css('-moz-transform', 'scale(<?=$scale?>)');
        $("#iframe_name").contents().find('html').css('-moz-transform-origin', 'left top');
        $("#iframe_name").contents().find('html').css('-webkit-transform', 'scale(<?=$scale?>)');
        $("#iframe_name").contents().find('html').css('-webkit-transform-origin', 'left top');
        $("#iframe_name").contents().find('html').css('transform', 'scale(<?=$scale?>)');
        $("#iframe_name").contents().find('html').css('transform-origin', 'left top');
        if (navigator.appVersion.match(/MSIE/)) {
            $("#iframe_name").contents().find('html').css('zoom', '<?=(100*$scale)?>%'); 
        }
    });
});

这是使用 php,$scale 是 0.5 的大小的 50%,或 2 的大小的两倍。它还使用 jQuery。

【讨论】:

    【解决方案2】:

    这是一个使用 jQuery (1.4.2) 的解决方案。应用的比例可以传递给函数,然后将适当的反向比例应用于 iframe。定位从 10.0.648 开始的 Chrome 版本

    function iframeFix (scale) { 
      // Chrome 10 preview fix
      // See: http://code.google.com/p/chromium/issues/detail?id=71937
      // 
      // iframe is scaled twice in this version of Chrome.
      // Fix is to apply a reverse scale on the iframe
      var chrome_preview_bug_version = "Chrome/10.0.648";
      if (navigator.userAgent.indexOf(chrome_preview_bug_version) > -1) {
        var scale_fix = Math.sqrt(1/scale); 
        $('iframe').css({
          '-webkit-transform': 'scale(' + scale_fix + ')',
          '-webkit-transform-origin': '0 0'
        });
      }
    }
    

    【讨论】:

      【解决方案3】:

      我们目前正在通过增加 iframe 的大小使内部内容窗口是 iframe 的原始大小,然后重新定位 iframe 以使内容窗口与 iframe 的原始位置匹配,然后剪辑来解决此问题iframe 以便只有内容窗口可见。

      所以,在我们的例子中,代码是这样的:

      var chromefix = 7;
      var scale = .147;
      frm.style.webkitTransform = 'scale(' + scale +',' + scale +')';
      frm.style.width = basew/scale*chromefix + "px";
      frm.style.height = baseh/scale*chromefix + "px";
      frm.style.left = ( basex - ((basew/scale-basew)/2)*chromefix ) + "px";
      frm.style.top = ( basey - ((baseh/scale-baseh)/2)*chromefix ) + "px";
      frm.style.clip= 'rect(0px,'+basew/scale+'px,'+baseh/scale+'px, 0px)';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-20
        • 1970-01-01
        • 2023-03-09
        • 2023-02-23
        • 2018-06-08
        • 1970-01-01
        • 2017-10-10
        • 1970-01-01
        相关资源
        最近更新 更多