document.domain
是一个只读属性,表示当前文档的域名。通过设置 document.domain
,可以放宽同源策略的限制,使得跨域的 iframe 和父页面之间可以进行通信。
document.domain
可以实现跨域的 iframe 和父页面之间的通信,这在某些场景下非常有用。document.domain
可以简化开发和调试过程。document.domain
的设置通常有以下几种情况:
document.domain
来实现通信。document.domain
可以简化这一过程。document.domain
?沙盒 iframe 默认情况下不允许修改 document.domain
,这是为了安全考虑。
https://example.com/parent.html
https://sub.example.com/iframe.html
document.domain
:document.domain
:document.domain
:sandbox
属性,并确保包含 allow-same-origin
或 allow-scripts
:sandbox
属性,并确保包含 allow-same-origin
或 allow-scripts
:parent.html
<!DOCTYPE html>
<html>
<head>
<title>Parent Page</title>
<script>
document.domain = 'example.com';
</script>
</head>
<body>
<iframe id="myIframe" src="https://sub.example.com/iframe.html" sandbox="allow-same-origin allow-scripts"></iframe>
<script>
window.onload = function() {
var iframe = document.getElementById('myIframe');
iframe.onload = function() {
console.log('Iframe loaded');
// 现在可以安全地与 iframe 进行通信
iframe.contentWindow.postMessage('Hello from parent', 'https://sub.example.com');
};
};
</script>
</body>
</html>
iframe.html
<!DOCTYPE html>
<html>
<head>
<title>Iframe Page</title>
<script>
document.domain = 'example.com';
</script>
</head>
<body>
<script>
window.onload = function() {
window.addEventListener('message', function(event) {
if (event.origin !== 'https://example.com') return;
console.log('Message received from parent:', event.data);
event.source.postMessage('Hello from iframe', event.origin);
});
};
</script>
</body>
</html>
通过以上步骤和示例代码,你可以在沙盒 iframe 上允许 document.domain
,从而实现跨域通信。
领取专属 10元无门槛券
手把手带您无忧上云