soundcloud - 如何处理 soundcloud oauth2 错误

标签 soundcloud

我正在尝试考虑 soundcloud 的 javscript connect oauth2 流程中的错误场景。步骤如下:
1. 使用 SC.connect(my_callback_fn) 启动 Soundcloud 连接
2. 将打开一个弹出窗口,其中包含 aound-Cloud 页面,请求用户“连接”或“取消”应用程序身份验证。
3. 用户点击“取消”。 (这就是我被困住的地方)

用户单击“取消”后,我在 window.opener(也称为父页面)上看到来自 sdk 的 JavaScript 错误。我想更优雅地处理这个问题。
目前我在 window.onerror 上有一个事件处理程序捕获错误字符串并继续进行适当的操作。我正在寻找一种更好的方法来处理此错误,因为也会针对所有其他 js 错误调用此方法。谢谢。

我得到以下 js 错误跟踪:
Uncaught Error: SC OAuth2 Error: The end-user denied the request. sdk.js:1<br/> (anonymous function) sdk.js:1<br/> window.SC.SC.Helper.merge.Dialog.AbstractDialog.AbstractDialog.handleReturn sdk.js:1<br/> window.SC.SC.Helper.merge.Dialog._handleDialogReturn sdk.js:1<br/> window.SC.SC.Helper.merge.connectCallback

最佳答案

这有点脏,但是捕获异常的最快方法是覆盖对话框的回调。 SC.connect() 方法返回对话框的实例,因此您可以:

var dialog = SC.connect(function () {
    // Connected!
});
var originalCallback = dialog.options.callback;
dialog.options.callback = function () {
    try { originalCallback.apply(this, arguments); } catch (e) {
        // Error!
    }
};

如果您不想等待异常,您可以简单地使用回调的第一个参数来获取错误(如果有):

dialog.options.callback = function (params) {
    if (params.error) console.log(params.error_description);
    else originalCallback.apply(this, arguments);
};

此外,您可以在对话框对象上设置一个计时器,定期检查用户是否关闭它,而无需单击“连接”或“取消”。您不能使用 onunload,因为浏览器不允许您在具有不同域(在本例中为 SoundCloud)的窗口上设置任何属性。这意味着 - 如果您在尝试访问任何 dialog.options.window 的属性时遇到异常 - 窗口仍处于打开状态。

注意:捕获来自 SoundCloud 的错误的另一种方法是直接修改您的callback.html(SoundCloud 回调 URL),因为 params 的内容首先作为回调 URL 传递到您的回调 URL。查询字符串,您只需调用不同的回调(在 onload 函数中)即可检查它们

关于soundcloud - 如何处理 soundcloud oauth2 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702870/

相关文章:

javascript - 玩家状态在Beatport与iframe上实现了javascript? soundcloud支持?

Soundcloud API 停止返回轨道

javascript - 在 HTML 5 mp3 播放器 (audio.js) 中播放 SoundCloud 流 uri

html - 用于 wordpress 的嵌入式播放器和图像内容

api - Soundcloud 身份验证和 API

javascript - SoundCloud api-v2 是否已弃用?

soundcloud - 获取 SoundCloud API 客户端 ID

angularjs - 什么时候 $scope.$apply 需要用 Angular 处理对象/数组?

html - Soundcloud:同时播放多个轨道 - HTML5 小部件

node.js - 是否可以在不申请新应用程序的情况下更改重定向?音云API