gpt4 book ai didi

javascript - 拦截iframe消息嵌套iframe,跨域

转载 作者:数据小太阳 更新时间:2023-10-29 05:20:49 26 4
gpt4 key购买 nike

我有一个来自 domain1.com 的网页,那里有一个 domain2.com 的 iframe,然后我在 domain3.com 的 domain2.com 中有另一个 iframe

我想在 domain2.com 中拦截来自 domain3.com 的消息,如果 domain2.com 不在 domain1.com 中,则消息会被正确接收,但如果我在 domain1.com 中有 domain2.com,则来自domain3.com 由 domain1.com 而不是 domain2.com 接收。有没有办法在 domain2.com 中捕获这些消息?

结构是这样的

domain1.com 有内部 iframe src="domain2.com"domain2.com 有内部 iframe src="domain3.com"

当我直接访问 domain2.com 时,它会捕获 domain3.com 的消息,当我访问 domain1.com 时,从 domain3.com 发送的消息将由 domain1.com 而不是 domain2.com 接收

最佳答案

我试图重新创建您的 iframe hell 。希望这就是您要找的。这应该涵盖您上面列出的场景。如果我误解了什么,请告诉我。

我还创建了一个 Plunker

index.html(域 1)

<!doctype html>
<html>

<head>
<meta charset="UTF-8">
</head>

<body>
domain 1

<form id="form">
<input type="text" placeholder="Enter message" name="message">
<input type="submit" value="Click to send">
</form>

<iframe src="domain2.html" id="iframe" style="display:block;height:120px"></iframe>

<script>
window.addEventListener('message', function(event){
const [message, domain] = event.data.split('|');
alert(`domain1: Received ${message} from ${domain}`);
});

form.onsubmit = function() {
iframe.contentWindow.postMessage(`${this.message.value}|domain1`, '*');
return false;
};
</script>

</body>
</html>

domain2.html

<!doctype html>
<html>

<head>
<meta charset="UTF-8">
</head>

<body>
domain 2

<form id="form">
<input type="text" placeholder="Enter message" name="message">
<input type="submit" value="Click to send">
</form>

<iframe src="domain3.html" id="iframe" style="display:block;height:60px"></iframe>

<script>
window.addEventListener('message', function(event){
const [message, domain] = event.data.split('|');
alert(`domain2: Received ${message} from ${domain}`);
});


form.onsubmit = function() {
iframe.contentWindow.postMessage(`${this.message.value}|domain2`, '*');
return false;
};
</script>

</body>
</html>

domain3.html

<!doctype html>
<html>

<head>
<meta charset="UTF-8">
</head>

<body>

domain 3

<form id="form">
<input type="text" placeholder="Enter message" name="message">
<input type="submit" value="Click to send">
</form>

<script>
window.addEventListener('message', function(event){
const [message, domain] = event.data.split('|');
alert(`domain3: Received ${message} from ${domain}`);
});

form.onsubmit = function() {
window.parent.postMessage(`${this.message.value}|domain3`, '*');
return false;
};
</script>

</body>
</html>

关于javascript - 拦截iframe消息嵌套iframe,跨域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52058760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com