我正在使用window.matchMedia
. 以下代码按预期工作 - 每个方向更改都以正确的值记录到控制台:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Test App</title>
</head>
<body>
<script type="application/javascript">
let isIframe= () => {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
let onOrientationChange = () => {
const isLandscape = window.matchMedia("(orientation: landscape)").matches;
console.log("Event: " + (isIframe() ? "Iframe " : "") + "landscape:" + isLandscape);
}
let mediaQueryList = window.matchMedia("(orientation: landscape)");
console.log("Onload: " + (isIframe() ? "Iframe " : "") + "landscape:" + mediaQueryList.matches);
mediaQueryList.addListener(onOrientationChange);
</script>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root">Hello World in Iframe</div>
</body>
</html>
但是当我在 中运行该页面时,不会触发iframe
使用注册的回调。addListener
在iframe
中,我只得到单数日志行 - Onload: Iframe landscape:true
,无论设备方向如何。
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root">Hello World</div>
<iframe id="game" src="iframeContent.html" frameborder="0" style="width: 960px; height: 600px;"></iframe>
</body>
我使用addListener
而不是addEventListener
,因为第二个功能不适用于所有 Safari 版本。
在 Safari 14 以及 Chrome 和 Firefox 的开发工具上测试。
我的问题是 - 为什么addListener
没有在iframe
.
谢谢你。