我们都熟悉的混合方案的网页上(HTTP / HTTPS)内容的问题。
我工作的一个网站上,这是不可避免的。 我并不想阻止这一点 。 我知道有一吨在该问题/答案。
我需要的是简单地检测到这种(通过JavaScript?),所以我可以调整页面的行为(表现出退化的行为或某事的通知)。 任何帮助吗?
我们都熟悉的混合方案的网页上(HTTP / HTTPS)内容的问题。
我工作的一个网站上,这是不可避免的。 我并不想阻止这一点 。 我知道有一吨在该问题/答案。
我需要的是简单地检测到这种(通过JavaScript?),所以我可以调整页面的行为(表现出退化的行为或某事的通知)。 任何帮助吗?
使用jQuery你可以找出是否有任何不安全项目存在用下面这段代码的网页上:
var flag = false;
if($("script[src^='http:']").length > 0
|| $("link[type='text/css'][href^='http:']").length > 0
|| $("img[src^='http:']").length > 0
|| $("iframe[src^=http:]").length > 0)
flag = true; // insecure content :(
else
// yay!
图片,JS,CSS是所有我能想到的不安全内容。 也许还有更多,但你可以很容易地add'em了,你找到。
这是哈克,但我设法与刚刚JavaScript的所有浏览器来解决这个问题。 让我看看,如果我可以勾画出来。
我们有这个基本的加密页面:
<html>
<body>
<div> stuff </div>
<iframe src="URL_WHICH_IS_MAYBE_INSECURE"></iframe>
</body>
</html>
当URL_WHICH_IS_MAYBE_INSECURE
为https,一切都很好。 但是,当URL_WHICH_IS_MAYBE_INSECURE
是http,IE将不加载,除非用户确定的不安全/混合内容的内容。 我想告诉页有点儿破获,直到他们点击允许用户。 至于原因,我不能去成,我知道所有的网站都值得信赖。 只是他们中的一些不支持SSL和父站点需要。
据我所知,我不能检测与JS此对话框/半负载状态。 但我所能做的就是在不安全的连接,如果他们允许它(这也使得IFRAME GO)运行JS。 所以, 只有当URL_WHICH_IS_MAYBE_INSECURE
是http:该网站是HTTPS(混合)我添加的代码+ HTML两位。
<html>
<body>
<div> stuff </div>
@if(needSpecialHandlingForMixedMode) {
<div id="secureWarn">
WARNING: This page has limited functionality, allow mixed content
</div>
}
<iframe src="URL_WHICH_IS_MAYBE_INSECURE"></iframe>
</body>
@if (needSpecialHandlingForMixedMode)
{
string baseUrl = Request.Url.SchemeAndHostAndPort().Replace("https", "http");
<script src="@baseUrl/scripts/security-warning.js"></script>
}
</html>
和脚本
$(document).ready(function(e) {
$("#secureWarn").remove();
});
因此,它是这样工作的。
希望这可以帮助别人。
干杯,迈克尔·