我正在研究一种在嵌入式reveal.js驱动的slid.es演示中触发幻灯片推进的方法。我有一个父页面通过iframe嵌入本地版本的幻灯片(与测试页面在同一个域中):
<iframe id="slidesdivlocal" src="slides-embed.html" width="576" height="420" scrolling="no" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
在此设置中,我可以使用以下内容成功控制iframe中的reveal API:
document.getElementById("slidesdivlocal").contentWindow.Reveal.left();
我希望能够控制来自外部slid.es域的iframed嵌入式演示文稿,因为这使嵌入变得更加容易。当我尝试这个时,我遇到了一个安全问题,因为父页面和iframed嵌入页面没有相同的来源:
Uncaught SecurityError: Blocked a frame with origin "http://localhost" from accessing a frame with origin "http://slid.es". Protocols, domains, and ports must match.
This is an example显示通过按钮点击触发left()或right()时两个不同嵌入会发生什么。
我看到人们建议Cross-window messaging解决这个问题,但我只能控制父页面,所以这不是一个选项。
有没有办法通过iframe将slid.es演示文稿嵌入其外部网站,并仍然通过其Reveal API方法控制它们?
答案 0 :(得分:0)
我对此有过一些聊天,事实证明我实际上在这里要求不可能。通过iframe控制从父页面运行的另一个域上的JS API,而无法访问其他域,这是你无法做到的,也不应该做的事情。
我要连接到本地托管的reveal.js幻灯片,而不是连接到slid.es上托管的幻灯片