我正在尝试考虑 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/