我有一个 https 网站,它试图在 iframe 中显示外部 https 网页。
在桌面版 Chrome 和 Firefox 上,它可以正常加载。
在适用于 iOS 的桌面/移动 Safari 和移动 Chrome 上,它不会加载任何内容。
在 Safari 中,我看到错误:
The page at about:blank was not allowed to display insecure content from http://example.com
尽管 iframe 加载的网页是 https,但看起来它正在尝试加载一些 http 内容,并阻止 iframe 加载任何内容。我真的很难过,因为它适用于某些浏览器,但不适用于其他浏览器。这是我运行的浏览器测试。
Desktop Chrome: Success
Desktop Firefox: Success
Desktop Safari: Fail
iOS Mobile Safari: Fail
iOS Mobile Chrome: Fail
Android Mobile Chrome: Success
有没有人遇到过这个错误并且知道如何解决它?为什么它在某些浏览器中有效,而在其他浏览器中无效?我正在努力使用 iframe 实现跨浏览器兼容性。任何有关黑客或解决方法的建议将不胜感激。更新:
在查看网络选项卡后。我看到它正在请求一个 HTTPS 网址,但该位置是一个 HTTP 网址。一些浏览器对此没有问题并显示内容。其他浏览器似乎阻止了它。即使位置 url 显示 http,请求 url 实际上确实打开了一个 https 网站。
最佳答案
问题是混合内容,即在您加载 HTTP 和 HTTPS 内容时。
您必须问自己的第一个问题是大多数开发人员未能做到的:这值得做吗?
假设你必须要有创意。你基本上必须有你的iframe
从您自己的站点加载页面并让它加载非 HTTPS 页面。这也意味着必须扫描 HTML/XML 属性,例如 src
。并重建它们的 URL(不要忘记 base
元素),以便通过您的站点提供这些图像。
<?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 在某些浏览器中正确加载网页,但在其他浏览器中不正确(不安全的内容错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64921494/