在我的Web应用程序中,我使用iframe
来加载"RocketChat"聊天实例。但是当我尝试使用浏览器登录火箭聊天时window.postMessage()
给我一个控制台错误。请找到下面的屏幕截图。
无法在"DOMWindow"上执行"postMessage":提供的目标源("https://haulmatic.rocket.chat"(与收件人窗口的源("http://localhost:3030"(不匹配。
axios.post('https://myDomain.rocket.chat/api/v1/login', {
username: '<myUserName>',
password: '<myPassword>'
}).then(function (response) {
if (response.data.status === 'success') {
res.set('Content-Type', 'text/html');
res.send(`
<iframe id="iframe" width="400px" height="900px" src="https://myDomain.rocket.chat?origin=http://localhost:3030"></iframe>
<script>
window.parent.postMessage({
event: 'login-with-token',
loginToken: '${ response.data.data.authToken }'
}, 'https://myDomain.rocket.chat/'); // rocket.chat's URL 206.189.138.6:3000
</script>
`);
}
}).catch(function() {
res.sendStatus(401);
});
参考:火箭聊天iframe身份验证文档
使用有效的用户令牌向 iframe 发送命令,该用户令牌已经是您正在 iframe 中浏览的频道中的成员。
这是我的详细答案:https://stackoverflow.com/a/58820488/628592