window.addEventListener("消息", getData);在野生动物园中不起作用?

Posted

技术标签:

【中文标题】window.addEventListener("消息", getData);在野生动物园中不起作用?【英文标题】:window.addEventListener("message", getData); doesn't work in safari? 【发布时间】:2021-12-31 23:21:39 【问题描述】:

我正在从 js 脚本向 iframe 发送一个 postmessage,它正在响应中

// 在 react 中监听 postMessage() 函数 // 反应文件

useEffect(() => 

function getData(e) 
  console.log("inside function");
  var origin = e.origin || e.originalEvent.origin;
  console.log("origin", origin);

  if (typeof e.data == "object" && "shopDomain" in e.data) 
    console.log(e.data);
   else 
    console.log("not able to catch data");
  

window.addEventListener("message", getData, false);
return () => 
  window.removeEventListener("message", getData, false);
;
, []);

// JS文件

let win = iframe.contentWindow;
win.contentWindow.postMessage(
  
    customerId: customerId_rs,
    parentLocation: window.location.host,
  ,
  "*"
);

查看了各种网站,但找不到任何解决方案。在此花费了将近 10 个小时,任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

似乎 safari 没有完全支持,但如果你检查 addEventListener 的浏览器支持,它应该支持,你可以看到

对于 touchstart 和 touchmove 事件,options.passive 参数默认为 true 对于滚轮和鼠标滚轮事件,options.passive 参数默认为 true options.signal 参数

这些没有支持。你可以阅读更多关于它here

【讨论】:

它支持我能够成功地从我的反应发送 postMessage 到 JS 文件。但我不能做相反的事情。我错过了一些东西

以上是关于window.addEventListener("消息", getData);在野生动物园中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

window.addEventListener 正在监听 window.parent.postMessage 两次

JS window.addEventListener仅适用于一页

$window.addEventListener 仅在第一次工作,但下一次在病房中无法通过 $watch 工作

window.addeventlistener使用方法

window.addEventListener 代码在移动设备上不起作用

window.addEventListener("消息", getData);在野生动物园中不起作用?