JavaScript 跨域取 iframe 中的元素涉及到浏览器的同源策略(Same-Origin Policy)。同源策略是一种安全机制,用于限制一个网页上的脚本与另一个不同源(协议、域名或端口不同)的网页进行交互。如果违反了同源策略,浏览器将阻止这种交互,以防止潜在的安全风险。
<script>
标签不受同源策略限制的特性。原因:浏览器的同源策略阻止了这种操作。
解决方法:
Access-Control-Allow-Origin
头部。Access-Control-Allow-Origin
头部。window.postMessage
方法在不同窗口之间安全地传递消息。window.postMessage
方法在不同窗口之间安全地传递消息。<script>
标签来绕过同源限制。<script>
标签来绕过同源限制。假设我们有一个跨域的 iframe,我们想从中获取数据:
<!-- 父页面 -->
<iframe id="myIframe" src="https://target-domain.com/page.html"></iframe>
<script>
const iframe = document.getElementById('myIframe');
iframe.onload = () => {
iframe.contentWindow.postMessage('getMessage', 'https://target-domain.com');
};
window.addEventListener('message', event => {
if (event.origin !== 'https://target-domain.com') return;
console.log(event.data);
});
</script>
<!-- iframe 页面 (https://target-domain.com/page.html) -->
<script>
window.addEventListener('message', event => {
if (event.origin !== 'https://source-domain.com') return;
if (event.data === 'getMessage') {
event.source.postMessage('Hello from iframe!', event.origin);
}
});
</script>
通过上述方法,可以安全地实现跨域通信,绕过浏览器的同源策略限制。
领取专属 10元无门槛券
手把手带您无忧上云