Google Docs iFrame:如何自定义嵌入式 Google Docs iFrame 的 css

Google Docs iFrame: How to customize the css of an embedded Google Docs iFrame

我有显示 google docs 文档的 iframe 代码:

<div itemprop="description" class="col-xs-12 no-h-padding" id="article_desc" style="margin:0 auto; width:90%; float:none;">

  <iframe src="https://docs.google.com/viewer?url=http://example.com/docs/1.pdf&hl=ar&embedded=true" scrolling="no"></iframe>

</div>

iFrame 运行良好并显示以下 iFrame:

现在我想把上图的灰色背景改成白色背景,一直在寻找解决办法,想出了this,但是不行,背景变白(使用我的自定义 css)但 google 文档不起作用,它显示一条消息告诉我 "something went wrong" 在 iF​​rame 内部。

有人知道如何更改灰色背景颜色吗?

编辑 它适用于 Google Chrome 和 Opera,但不适用于 Firefox 和 Safari。

我不能确定这是否是问题所在,但是,由于它在不同浏览器中的显示方式不同,我倾向于认为这是 CSS normalizing/resetting 的问题. This answer 有执行此操作的脚本,评论中还有更多脚本,因此我建议您查看一下。

在这种情况下,关于 iframe 的样式可以注意以下几点:

  1. 您不能设置从其他域(跨域)加载的 iframe 的样式。
  2. 一种解决方法是通过将内联 CSS 提供给所使用的 iframe 标记来仅设置 iframe 块(而非 iframe 内容)的样式。
  3. 您可以通过首先获取 domain/server 中的内容然后从那里提供 iframe 以使其来自同一域并因此使用常规 CSS 和javascript.

以下 link 包含更多详细信息和可用于此场景的脚本示例:How to apply CSS to iframe?

Google docs 目前很乐意通过 CORS 请求提供已发布的文档。

通过将以下脚本标记放在 <body> 的底部,您的所有 google 文档 iframe 都将被包含您的文档的普通 div 替换。

    <script>
        // get all iframes that were parsed before this tag
        var iframes = document.getElementsByTagName("iframe");

        for (let i = 0; i < iframes.length; i++) {
            var url = iframes[i].getAttribute("src");
            if (url.startsWith("https://docs.google.com/document/d/")) {
                // create div and replace iframe
                let d = document.createElement('div');
                d.classList.add("embedded-doc"); // optional
                iframes[i].parentElement.replaceChild(d, iframes[i]);

                // CORS request
                var xhr = new XMLHttpRequest();
                xhr.open('GET', url, true);
                xhr.onload = function() {
                    // display response
                    d.innerHTML = xhr.responseText;
                };
                xhr.send();
            }
        }
    </script>

不再有 iframe 限制。 CSS 将按预期工作。