gpt4 book ai didi

javascript - Soundcloud Javascript API - 连接 window.opener.setTimeout() 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:46:19 25 4
gpt4 key购买 nike

我遵循了连接到其开发站点上的 SC API 的简单示例。我已设法让本地服务器上的所有内容正常运行,但现在我已将其推送到我的网站,但它似乎无法正常运行。

弹出“连接到应用程序”窗口。我点击连接。它显示了我的“redirect_url”页面,其中包含:

<body onload="window.opener.setTimeout(window.opener.SC.connectCallback, 1)">

但它似乎从未被解雇过。

我在 2 年前在这里发现了一个关于此的问题:Javascript SDK connect() function not working in chrome

最上面的答案说,如果您有 SC Chrome 应用并尝试监听“存储事件”作为解决方法,则尝试执行此操作会出现问题。

我的问题是我没有在 chrome 上安装 SC 应用程序,而且从来没有安装过。此外,这在我的本地服务器上完美运行似乎很奇怪。

谁能想到将代码移至我的虚拟主机会如何解决这个问题?某些托管公司是否出于某种原因或其他原因阻止了 window.opener.setTimeout()?

预先感谢您的帮助。

最佳答案

在经历了数小时无望的调试之后才弄明白了这一点。

将回调拉入脚本标记,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Connect with SoundCloud</title>
</head>
<body>
<b style="text-align: center;">This popup should automatically close in a few seconds</b>
<script type="text/javascript">
window.opener.SC.connectCallback.call(this);
</script>
</body>
</html>

这有点奇怪,因为该函数预期在 window 上调用,而不是在 SC 上调用,因此调用了 call()

它的另一部分是 this 需要引用弹出窗口的 window 对象,因为那是带有 window.location.search 的对象 设置。网址如下所示:

http://localhost:8080/callback.html?code=<CODE>&state=SoundCloud_Dialog_ca4d6#access_token=<ACCESS TOKEN>&scope=non-expiring

如果您查看 window.opener.SC.connectCallback,它看起来像这样:

function (){r.notifyDialog(this.location)}

因此,this 需要是弹出窗口,而不是原始的父窗口。

如果您将 connectCallback 函数传递到父窗口的 setTimeout 中,它会被调用,并且 this 设置为父窗口的 window 对象,它没有 window.location.search 查询参数(身份验证 token )。

希望这是有道理的。至少,它应该可以解决您的问题。

另外,如果你坚持使用body的onload属性,也可以改成这样:

<body onload="setTimeout(window.opener.SC.connectCallback)">

关于javascript - Soundcloud Javascript API - 连接 window.opener.setTimeout() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com