除了window,哪些对象有postmessage和onmessage?

文档上看只有postmessage和onmessage是window的方法,但好像还有其他对象有这两个方法,比如 web work。还有其他对象有的吗?

阅读 1.5k
2 个回答

iframe与EventSource创建的对象也是有的:

<!DOCTYPE html>
<html>
<body>

<h1 id="myH1"></h1>
<div id="myDIV"></div>

<p><b>注释:</b>Internet Explorer 不支持 Server-Sent 事件。</p>

<script>
if(typeof(EventSource) !== "undefined") {
  var source = new EventSource("/html/demo_sse.php");
  source.addEventListener("open", function() {
    document.getElementById("myH1").innerHTML = "Getting server updates";
  });
  
  source.addEventListener("message", function(event) {
    document.getElementById("myDIV").innerHTML += event.data + "<br>";
  });

} else {
  document.getElementById("myDIV").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script>

</body>
</html>

https://www.w3school.com.cn/jsref/event_onmessage_sse.asp

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

postMessage()onmessageWeb API 中的方法和事件,用于在不同的窗口或框架之间进行跨域通信。除了浏览器窗口和框架(包括 iframe)之外,其他一些对象也可以使用这两个方法和事件进行跨域通信。以下是一些支持 postMessage()onmessage 的对象:

  1. Web Workers: postMessage()onmessage 也可以在 Web Workers 中使用,用于在 worker 线程和主线程之间进行通信。
  2. Service Workers: postMessage()onmessage 也可以在 Service Workers 中使用,用于在 Service Workers 和网页之间进行通信。
  3. MessageChannel API: MessageChannel API 是一个新的 Web API,用于创建双向通信通道,允许不同的上下文进行通信。它也支持 postMessage()onmessage 方法和事件。
    4. WebSockets: WebSockets 是一种基于 TCP 协议的双向通信技术,也支持 send() 方法和 onmessage 事件,用于在客户端和服务器之间进行实时通信。

总之,任何支持 JavaScript 的对象都可以使用 postMessage()onmessage 进行跨域通信,只要它们实现了这些方法和事件。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
推荐问题
logo
Microsoft
子站问答
访问
宣传栏