我有一些看起来像这样的JavaScript:
// https://secure.example.com
document.domain = "example.com";
window.myVar = "value";
// http://example.com
document.domain = "example.com";
var iframe = document.body.appendChild(document.createElement("iframe"));
iframe.onload = function () {
console.log(iframe.contentWindow.myVar);
}
iframe.src = "https://secure.example.com";
我正试图通过将myVar
加载到https://secure.example.com
中的iframe来http://example.com
。请注意http
和https
的使用情况。如果这两个域都使用了http
或https
,那么现在我希望有一个使用http
而另一个使用https
。我已逐步完成代码以验证document.domain
是否设置正确。为什么会这样?
答案 0 :(得分:2)
您的问题不是域名或托管服务商。你的问题是协议
您无法跨协议设置document.domain
http
和https
不是同一个来源,就像example.com:80因为端口而与example.com:8080的起源不同。
有很好的安全理由不允许混合http和https
请阅读https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
答案 1 :(得分:0)
基于MDN的页面How to fix a website with blocked mixed content:
避免混合内容阻止的最佳策略是为所有人服务 内容为HTTPS而非HTTP。
对于您自己的域,将所有内容作为HTTPS提供并修复您的链接。 通常,内容的HTTPS版本已经存在,而这只是 需要添加" s"链接 - http://到https://。
对于其他域,请使用该网站的HTTPS版本(如果有)。如果是HTTPS 如果没有,您可以尝试联系域名并询问是否 他们可以通过HTTPS提供内容。