如何通过单击 iframe 中的按钮将用户重定向到另一个页面

How do I redirect user to another page from clicking a button that's in an iframe

我创建了一个完全可定制的音频播放器小部件,目的是让人们可以通过包含 <iframe> 标签将其嵌入到他们的博客 post 中(例如 wordpress):

<iframe id=“my_widget” width="800px" height="100%" scrolling="no" frameborder="no" allow="autoplay" src="http://mywebsite.com/player?audio_id=xxxxxxx">
</iframe>

小部件包含一些按钮,用于将文章分享到 facebook、twitter 以及将博客 url 复制到剪贴板。当我通过将小部件嵌入我网站的页面来测试它时,所有按钮都按预期工作。但是,当我将小部件嵌入到 wordpress post 中时,单击共享按钮会出现此 javascript 错误:

Uncaught DOMException: Blocked a frame with origin "http://mywebsite.com" from accessing a cross-origin frame.
at shareFacebook (http://mywebsite.com/player?audio_id=xxxxxxx:172:46)
at HTMLButtonElement.onclick (http://mywebsite.com/player?audio_id=xxxxxxx:38:123)

我将用户重定向到 Facebook 以共享 post(在我的小部件代码中)的逻辑如下所示:

<button class="share-fb-button-sm" onclick="shareFacebook();">

<script>
    function shareFacebook() {
        var currentURL = window.top.location.href;
        window.top.location.href = "https://www.facebook.com/sharer/sharer.php?u=" + currentURL;
    }
</script>

我知道这个 javascript 错误告诉我我的重定向尝试被同源策略阻止了。但我肯定已经看到其他 iframe 小部件执行我正在尝试执行的操作。这里的正确做法是什么?我似乎无法弄清楚其他人是如何做到这一点的。

感谢 Jimmy Leahy 的建议,我不知道 window.open()。这部分解决了我的问题。经过更多研究后,我发现 document.referrer()。从 iframe 访问 location.href 会被同源策略阻止,但 document.referrer() 不会。此函数将 return 调用 iframe 的 url,它最终成为父 url。以下是我如何实施我的解决方案。

<button class="share-fb-button-sm" onclick="shareFacebook();">

<script>
    function shareFacebook() {
        var currentURL = document.referrer;
        window.open("https://www.facebook.com/sharer/sharer.php?u=" + currentURL);
    }
</script>