【问题标题】:iframe scrollbar disappears in Chrome on a Maciframe 滚动条在 Mac 上的 Chrome 中消失
【发布时间】:2013-11-14 17:19:07
【问题描述】:

我有一个完整的页面 iframe,但在 chrome 中,滚动条最初加载然后消失,房间在那里,你可以使用它,但它不可见。在 pc 上的 safari、firefox 和 chrome 中完美运行,但在 mac 上,您可以看到滚动条的良好状态,但滚动条本身不见了。

body,html{
    height:100%;
    overflow:hidden;
}
#me-branding-bar{
    overflow:hidden;
    width:100%;
    height:40px;
    position:relative;
    background-color:#ff9900;
}
#me-content{
    height:100%;
    width:100%;
    position:relative;
    border:1px solid #ff9900;
}
#me-content iframe{
    border:1px solid #000;
    overflow:scroll;
}
<div id="me-branding-bar">

</div>

<div id="me-content">
    <iframe border="0" frameborder="0" hspace="0" vspace="0" marginheight="0" marginwidth="0" src="<?php echo $url;?>" style="overflow:visible;height:100%;width:100%;" height="100%" width="100%"></iframe>
</div>

http://jsfiddle.net/RYwty/

【问题讨论】:

  • 可以尝试一些建议[这里][1] [1]:stackoverflow.com/questions/6199892/…
  • 我在 chrome (v30.0.1599.101) 中为您的 jsfiddle 示例提供了一个滚动条。
  • @kosherjellyfish 我在发帖前确实尝试过这个建议
  • @TiMESPLiNTER 你是用mac还是pc?我在 Mac 上安装了最新的 Chrome,但看不到它...
  • Mac 上的 Chrome 可能无法很好地显示条形图。滚动条仅在为我滚动时出现。

标签: html css macos google-chrome iframe


【解决方案1】:

为什么在 Mac 上使用 Chrome 时滚动条会在 &lt;iframe&gt; 中消失?

当您的&lt;iframe&gt; 包含来自外部站点的整个页面时,这是一个相当广泛的问题。让我们把它分解成几个步骤。

以下示例假设您在 Mac 上使用 Chrome。

做一个简单的测试

创建一个非常简单的 HTML 页面,将其放入 &lt;iframe&gt;,然后在 Mac 上的 Chrome 中查看 (DEMO)。

滚动条不会消失。一切似乎都很好。所以很可能是外部网站上的某些东西导致了问题。

调试外部站点

症状是滚动条在消失之前实际上出现了很短的时间,但页面仍然可以滚动。也许是 JavaScript 导致了这个问题?让我们禁用 JavaScript 和 try it out

事实证明,当 JavaScript 被禁用时,滚动条并没有消失。所以 JavaScript 加载的东西导致了这个问题。进一步调试表明,flash 对象是罪魁祸首。

再做一次测试

创建两个简单的 HTML 测试页面并在其中一个中添加一个 flash 对象。将它们放到不同的&lt;iframe&gt;s 和compare them 中看看有什么区别。

<object type="application/x-shockwave-flash"></object>

原来带有 flash 对象的那个没有可见的滚动条。

结论

滚动条不会在普通&lt;iframe&gt; 中消失,而是在带有 flash 对象的情况下消失。这可能是一个错误,也可能是故意的肮脏黑客行为。许多 Flash 广告和视频在 &lt;iframe&gt;s 中提供,并且其中包含滚动条并不美观。

但重点是,您在 &lt;iframe&gt; 中提供外部内容,而这些是您无法控制的。

<iframe src="<?php echo $url;?>"></iframe>

也许您可以尽力解决一两个问题,但是在外部页面中发生的许多事情可能会在这里和那里破坏事情。人们甚至可以在 JavaScript 和 HTTP 标头的帮助下prevent their sites from being placed in an &lt;iframe&gt;。只要页面加载,您就应该对此感到高兴。不要太在意诸如消失的滚动条之类的小细节。仅在页面实际上不可滚动时才担心它。你说的是 Mac 上的滚动。大多数情况下,这是通过手势而不是滚动条来完成的。

如果您确实想要更多地控制外部内容,请考虑使用cURLmodifying the contents with HTML parsers 在服务器端加载它。

【讨论】:

  • 这很奇怪,我不希望 iframe 内容对滚动条本身产生这种影响,不应该跨域控件阻止吗?
  • 效果只在iframe内部的文档滚动条上,而不是主页面的滚动条,所以这里没有涉及跨域。此行为对您的影响特别大,因为您使用的是整页 iframe。这甚至可能是一个错误,所以我想没有人会期望
  • 对...它确实适用于所有其他浏览器...甚至在 pc 上的 chrome
  • 这就是为什么它可能是一个错误,而且你不应该太担心,因为它在 Mac 上,很少有人在 Mac 上使用滚动条滚动。你无法控制一切。最好的办法是提交错误报告,看看他们发现了什么。
【解决方案2】:

下面的代码似乎解决了 Mac 上 Chrome 中的 iframe 滚动条问题。

此修复与 Mac 和 PC 上的 Firefox、Safari 和 Opera 跨浏览器兼容。

jsfiddle

HTML:

<div id="me-branding-bar"></div>

    <div id="me-content">
        <iframe src="http://tsn.ca" height="100%" width="100%" class="iframeclass"></iframe>
    </div>

CSS:

body,html{height:100%;overflow:hidden;}
        #me-branding-bar{overflow:hidden;z-index:102;width:100%;height:40px;position:relative;background-color:#ff9900;}
        #me-content{height:100%;width:100%;position:relative;border:1px solid #ff9900;}
        #me-content iframe{border:1px solid #000;}

.iframeclass::-webkit-scrollbar {
    width:10px;
}

.iframeclass::-webkit-scrollbar-track {
    -webkit-border-radius:5px;
    border-radius:5px;
    background:rgba(0,0,0,0.02);
}

.iframeclass::-webkit-scrollbar-thumb {
    -webkit-border-radius:5px;
    border-radius:5px;
    background:rgba(0,0,0,0.3);
}

.iframeclass::-webkit-scrollbar-thumb:hover {
    background:rgba(0,0,0,0.3);
}

.iframeclass::-webkit-scrollbar-thumb:window-inactive {
    background:rgba(0,0,0,0.3);
}

【讨论】:

    【解决方案3】:

    从您的 html 中删除样式并添加 scrolling="yes" >> http://jsfiddle.net/95Tes/

    <!--same code as before just remove your css styles from the html -->
    

    【讨论】:

    • 啊。好的,所以我只是尝试使用另一个源站点,它工作正常。 tsn.ca 网站上的某些内容正在覆盖卷轴。 H/O
    • 我认为这是 chrome mac 的 bug,在所有其他浏览器中都可以正常工作
    【解决方案4】:
    *{
       margin:0; 
       padding:0;
    }
    html, body{
       height:100%; 
       width:100%;
    }
    #me-branding-bar{
       width:100%; 
       height:10%; 
       position:relative; 
       background-color:#ff9900; 
       display:block;
    }
    #me-content{
       display:block; 
       height:90%; 
       width:100%; 
       position:relative; 
       border:none;
    }
    #me-content iframe{
       border:none; 
       display:block; 
       overflow:auto;
    }
    ::-webkit-scrollbar{-webkit-appearance: scrollbarthumb-vertical;}
    

    试试link 1link 2

    jsfiddle

    【讨论】:

    • 立即尝试,但首先检查链接可能您的设置有问题
    • 取决于您 iframe 的网站。相同的代码适用于其他网站。
    【解决方案5】:

    这段代码可能对你有帮助。我没有mac所以请不要给任何负面评价,我希望。我想说你在css规则和html样式中没有使用不同的样式。你这样使用

    <iframe border="0" frameborder="0" hspace="0" vspace="0" marginheight="0" marginwidth="0" src="http://www.tsn.ca" style="overflow:visible;height:100%;width:100%;"></iframe>
    
    
    #me-content iframe{
        border:1px solid #000;
        overflow:scroll;
    }
    

    在其他选项卡中查看图像或先保存图像,然后看更清晰!

    请使用我修改过的css和html的代码

           <style>
    *{
        margin:0px;
        paddinig:0px;
        }
    
    body,html{
        height:100%;
        overflow:hidden;
    }
    #me-branding-bar{
        overflow:hidden;
        width:100%;
        height:40px;
        position:relative;
        background-color:#ff9900;
    }
    #clearboth {
       clear:both;
    }
    #me-content{
        height:calc(100% - 40px);
        width:100%;
        position:relative;
        border:1px solid #ff9900;
        box-sizing:border-box;
        -moz-box-sizing:border-box; /* Firefox */
    }
    #me-content iframe{
        border:1px solid #000;
        overflow:scroll;
        width:100%;
        height:100%;
    }
    
           </style>
    

    这是修改后的html

             <div id="me-branding-bar">
    
            </div>
    
            <div id="clearboth"></div>
    
            <div id="me-content">
                <iframe border="0" frameborder="0" hspace="0" vspace="0" marginheight="0" marginwidth="0"
                src="http://www.tsn.ca"></iframe>
            </div>
    

    希望它会起作用!

    【讨论】:

    • 我认为,Asraful 的代码可能会有所帮助,因为相同的属性可能不适用于单个值..尝试上面的代码...
    • Bar 仍然在 Mac 上的 chrome 中消失... :(
    猜你喜欢
    • 2016-11-28
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2019-07-09
    • 2011-04-25
    相关资源
    最近更新 更多