jQuery 是一个快速、小巧且功能丰富的 JavaScript 库,它简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。iframe 是 HTML 中的一个元素,用于在当前页面中嵌入另一个 HTML 页面。
<iframe>
标签嵌入页面。<iframe>
元素并插入到页面中。在 iframe 中调用父页面的方法,通常会遇到跨域问题。如果 iframe 和父页面在同一个域下,可以直接调用父页面的方法。
父页面 (parent.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Parent Page</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<iframe id="myIframe" src="iframe.html"></iframe>
<script>
$(document).ready(function() {
window.myFunction = function() {
alert('Method called from iframe!');
};
});
</script>
</body>
</html>
子页面 (iframe.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Iframe Page</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<button id="callParent">Call Parent Method</button>
<script>
$(document).ready(function() {
$('#callParent').click(function() {
window.parent.myFunction();
});
});
</script>
</body>
</html>
原因:
解决方法:
postMessage
API 进行跨域通信。示例代码(使用 PostMessage):
父页面 (parent.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Parent Page</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<iframe id="myIframe" src="iframe.html"></iframe>
<script>
$(document).ready(function() {
window.addEventListener('message', function(event) {
if (event.origin !== 'http://example.com') return; // 检查来源
alert('Method called from iframe!');
});
});
</script>
</body>
</html>
子页面 (iframe.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Iframe Page</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<button id="callParent">Call Parent Method</button>
<script>
$(document).ready(function() {
$('#callParent').click(function() {
window.parent.postMessage('callMyFunction', 'http://example.com');
});
});
</script>
</body>
</html>
通过上述方法,可以在 iframe 中安全地调用父页面的方法,即使它们不在同一个域下。
领取专属 10元无门槛券
手把手带您无忧上云