- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JS 的 postMessage 方法建立跨域通信。嵌入式 iframe 正在发送消息,而父窗口正在接收它。问题是,即使在 receiveMessage 中检查了来源(这大大减少了收到的消息数量),我仍然收到两条消息,一条是我发布的,另一条是很久以前写的一个不同的目的。所以,我真的不能修改这个其他(不需要的)消息的 postMessage 方法。在 postMessage 方法或 receiveMessage 中有没有一种方法可以帮助识别哪一个是我的?也许我在这里缺少一些额外的参数或配置?
postMessage 代码(在嵌入式 iframe 中):
window.parent.postMessage("Hello world!", "*");
receiveMessage 的代码(在父窗口中):
window.addEventListener("message", receiveMessage, false);
function receiveMessage(e) {
var reliableHost = "://" + "<%= Site.current_site.internal_admin_host %>";
var secureHost = "https" + reliableHost;
var notSecureHost = "http" + reliableHost;
if (e.origin.indexOf(secureHost) != -1 || e.origin.indexOf(notSecureHost) != -1) {
var data = e.data;
console.log(data);
console.log(e.source);
// filter the other event
}
}
最佳答案
由于 data
参数完全在您的控制之下并且可以是一个对象,因此您可以在 data 参数中使用约定来确保您只处理您关心的消息。另请注意 indexOf(...) != -1
可能不太正确,您可能需要 indexOf(...) == 0
(或 startsWith
) 而不是,以避免在字符串后面匹配。
所以在收据上(参见 ***
行 [你必须向右滚动 SO 的显示]):
window.addEventListener("message", receiveMessage, false);
function receiveMessage(e) {
var reliableHost = "://" + "<%= Site.current_site.internal_admin_host %>";
var secureHost = "https" + reliableHost;
var notSecureHost = "http" + reliableHost;
if ( (e.origin.indexOf(secureHost) == 0 || e.origin.startsWith(notSecureHost) == 0) && // ***
(e.data && e.data.type === "whatever") // ***
) { // ***
var payload = e.data.payload; // ***
console.log(payload); // ***
console.log(e.source);
// filter the other event
}
}
发送时:
postMessage({type: "whatever", payload: /*...*/});
我总是将此机制与不同的 type
值一起使用,以便与同一整体页面/应用程序进行的不同通信 channel 相互干扰。
关于javascript - 在 receiveMessage javascript 中过滤消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54023052/
我有一个 iframe,其中有一个 JavaScript 函数: function callParent(){ parent.postMessage('closeModal','*');
Client1 在窗口内有一个 iframe。Client2 通过异步脚本向 Client1 发送 postMessage(),然后 Client1 执行某些操作(绕过跨域策略限制)。到目前为止,它运
我配置了一个简单的 SQS,我想一次处理 4 条消息。在我的测试中,它有 2 个“可用”消息。当我收到消息时,一次只返回 1。我做错了什么? sqs = boto3.client('sqs') res
我正在使用 JS 的 postMessage 方法建立跨域通信。嵌入式 iframe 正在发送消息,而父窗口正在接收它。问题是,即使在 receiveMessage 中检查了来源(这大大减少了收到的消
我在 lambda 中有以下代码来接收 SQS 消息:当我将消息注入(inject) SQS 时,lambda 触发,但显示 data.Messages 为空。 function receiveMes
我有一个 SQS 队列,我想在消息到达队列时触发 lambda 函数。我已经编写了 lambda 函数,当我单击“测试”按钮时它可以成功运行。当我转到 SQS 并尝试将其配置为 lambda 触发器时
我正在使用 aws-sdk Node 模块(据我所知)通过批准的方式来轮询消息。 基本上总结为: sqs.receiveMessage({ QueueUrl:
我是一名优秀的程序员,十分优秀!