在前端开发中,父页面与子页面之间的通信是一个常见的需求。jQuery 提供了多种方法来实现这种通信,其中一种常见的方法是使用 iframe 和 postMessage API。
iframe 和 postMessage,父页面和子页面可以独立开发和维护,同时保持通信。postMessage API 提供了一种安全的跨域通信方式,可以有效防止跨站脚本攻击(XSS)。postMessage API 在现代浏览器中得到了广泛支持,具有良好的兼容性。postMessage 向子页面发送消息,子页面监听消息并执行相应的方法。postMessage 向父页面发送消息,父页面监听消息并执行相应的方法。postMessage 进行通信。postMessage 进行通信,提高代码的可维护性和复用性。<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>父页面</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<iframe id="childFrame" src="child.html"></iframe>
<button id="callChildMethod">调用子页面方法</button>
<script>
$(document).ready(function() {
$('#callChildMethod').click(function() {
var iframe = document.getElementById('childFrame');
iframe.contentWindow.postMessage('callChildMethod', '*');
});
window.addEventListener('message', function(event) {
if (event.data === 'childMethodResult') {
console.log('子页面方法执行结果');
}
});
});
</script>
</body>
</html><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>子页面</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<script>
window.addEventListener('message', function(event) {
if (event.data === 'callChildMethod') {
console.log('父页面调用子页面方法');
// 执行子页面方法
var result = '子页面方法执行结果';
event.source.postMessage(result, event.origin);
}
});
</script>
</body>
</html>原因:
解决方法:
postMessage API 处理跨域通信,确保 targetOrigin 参数设置正确。// 父页面发送消息
iframe.contentWindow.postMessage('callChildMethod', 'https://example.com');
// 子页面监听消息
window.addEventListener('message', function(event) {
if (event.origin !== 'https://example.com') return; // 验证消息来源
if (event.data === 'callChildMethod') {
// 执行子页面方法
var result = '子页面方法执行结果';
event.source.postMessage(result, event.origin);
}
});通过以上方法,可以确保父页面能够正确调用子页面的方法,并且保证通信的安全性和可靠性。