Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在Javascript中监听传出的PostMessage?_Javascript_Event Listener_Postmessage - Fatal编程技术网

有没有办法在Javascript中监听传出的PostMessage?

有没有办法在Javascript中监听传出的PostMessage?,javascript,event-listener,postmessage,Javascript,Event Listener,Postmessage,有没有办法在源站页面收听postMessages? 当前窗口对象发送postMessage时触发的任何事件 我找了很多,但什么也没找到 非常感谢你的帮助。谢谢大家! [编辑]我之所以尝试这样做,是因为我正在开发一个扩展来分析页面的通信。例如,页面如何与内部IFrame或它打开的新窗口通信。 到目前为止,我所做的是在每个IFrame/新窗口中注入一个Javascript文件,并向窗口对象添加一个消息侦听器。有了它,我可以检测到目标何时收到消息。 问题是我想获得源代码的完整URL,如果它是跨源代码,

有没有办法在源站页面收听postMessages?
当前窗口对象发送postMessage时触发的任何事件

我找了很多,但什么也没找到

非常感谢你的帮助。谢谢大家!

[编辑]我之所以尝试这样做,是因为我正在开发一个扩展来分析页面的通信。例如,页面如何与内部IFrame或它打开的新窗口通信。 到目前为止,我所做的是在每个IFrame/新窗口中注入一个Javascript文件,并向窗口对象添加一个消息侦听器。有了它,我可以检测到目标何时收到消息。
问题是我想获得源代码的完整URL,如果它是跨源代码,这是不可能的。

您可以在函数中包装
window.postMessage()
,然后在那里触发一个自定义事件(使用JS、jQuery或您喜欢的其他库中的本机自定义事件)

下面是一个使用(适用于Chrome和Firefox)的示例。 请查看控制台选项卡


试验
window.app={
开始:函数(){
//获取iframe
变量域='*';
var iframe=document.getElementById('myIFrame').contentWindow;
//收听自定义事件
document.body.addEventListener('postMessage',函数(e){
log('postMessage已被监听');
},假);
函数myPostMessage(消息,域){
iframe.postMessage(message,domain);//发送消息和目标URI
//创建自定义事件
var event=新事件(“postMessage”);
文件.正文.调度事件(事件);
}
//例如,发送预先通知的消息
setInterval(函数(){
var message='时间是:'+(new Date().getTime());
myPostMessage(消息,域);//发送消息和目标URI
}, 1000);
}
};
这里是一个稍加修改的版本,允许将postMessage的原始事件传递给自定义函数

在问题的最后一次编辑之后。
显然,只有当您拥有“目标”源代码并且可能不适用于您的特定场景时,此解决方案才会起作用(我仍然希望它对其他读者也有用)。

猴子补丁可以做到这一点:

const pm = window.postMessage;
window.postMessage = (msg, domain) => {
    console.log(msg);
    pm(msg, domain);
}

您不是指
window.addEventListener(“message”,receiveMessage,false)?将向目标窗口对象开火。但不是在发送者那里。当你发送信息时,你能不能不做任何你需要做的事情?为什么你需要“倾听”它?它是用来分析现有页面的。我只能向它们中注入一个javascript文件。我将尝试在编辑中更精确地解释我的问题。这是一种有趣的方法。但正如我在上面的编辑中所述,我不能修改消息的发送方式。它用于观察现有页面的通信,我只能在其中注入Javascript。我很抱歉我的解释能力不好。刚刚看到你的编辑:)是的,这种方法很好,肯定有用。谢谢你的评论,不确定是否可能,因为浏览器中实现了安全性。
const pm = window.postMessage;
window.postMessage = (msg, domain) => {
    console.log(msg);
    pm(msg, domain);
}