首页 > 解决方案 > iframe 不显示网站样式

问题描述

使用 php 重定向在 (https) 站点上提供 (http) 页面。当 iframe 加载时,页面的样式不会显示,但网站会显示。

PHP 重定向

<?php
if (isset($_GET['url'])) {
  $url = $_GET['url'];
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  echo $data;
}
?> 

iFrame

<iframe src="https://sample/redirect.php?url=http://sample2/form/sampleform.aspx" style="width:100%;height:1200px;" frameborder="0" scrolling="auto" allowfullscreen></iframe>

浏览器检查器显示

ReferenceError: validationSummary is not defined
Loading failed for the <script> with source

标签: phpiframe

解决方案


这感觉就像问题都围绕着您的设置:

使用 php 重定向在 (https) 站点上提供 (http) 页面。

你违反了协议。检查调试器工具的网络选项卡。我敢打赌,您会看到有关通过 HTTPS 调用不安全资源的错误。(以上消息:

当 HTTP 页面加载时,它很可能通过 HTTP 调用其 .css 文件——这是违反规则的。

更新要通过 HTTPS 调用的 CSS。问题应该会消失。

另请注意,您可能有一个 css 处理器(例如,lesscss)也被不安全地加载,因为它是用 .net 制作的 - 很可能包含的脚本也被不安全地加载。这些也会导致您的调用出现问题(您的错误消息:浏览器无法调用框架的错误消息。可能是因为脚本不安全并且无法加载它,因为 HTTPS 不允许加载不安全的资源.)

[以下是一种解决方法。我强烈建议不要这样做。加载页面上的资源就像加载页面本身一样。这是一个糟糕的解决方案,但它会起作用。这是一个糟糕的解决方案,这是一个糟糕的做法,它不安全,这是你永远不应该做的一切......但是通过 HTTPS 提供 HTTP 页面来绕过系统也是如此。你真的应该通过 HTTPS 提供服务;如果我被要求审查该代码,我会把它扔掉并说“修复它”。]

如果您无法通过 HTTPS 访问 CSS/脚本 - 通过修改您由 PHP 提供的代码,由 PHP 提供 CSS。(使用模式匹配或正则表达式替换您的 PHP 版本 CSS 的地址,然后提供页面。)


推荐阅读