使用soundcloud SDK时,JS提示给了我'SC' is not defined
SC.whenStreamingReady( function() {
' SC'未定义
我在我的主文件之前添加了各种js文件 - 并将它们粉碎在一起...... master有一个jQuery闭包,因为这是一个WordPress项目。
(默认情况下调用jQuery,因为它基于WordPress安装)
PREPENDED js文件
fastclick(凉亭)
速度(凉亭)
soundcloudSDK(供应商)
(全部结合)
主文件
主的script.js:
(function($){
// =============================================
"use strict";
$(document).ready(function() {
// get track ready
var topDown = function() {
// soundcloud client ID
var scClientId = 'BLABLABLA';
// initialize the SDK
SC.initialize({
client_id: scClientId,
redirect_uri: "http://example.com/callback.html"
});
SC.whenStreamingReady( function() {
console.log('TOP DOWN');
});
};
});
// =============================================
})(jQuery);
编译为:compiled-js-file.js
HTML文件......
<!doctype html>
<head>
<title>hi</title>
<script src='jQuery.js'></script>
<script src='compiled-js-file.js'></script>
</head>
<body>
<h1>html file</h1>
</body>
</html>
等
我在主题的基础上制作了一个.jshintrc文件......
"globals": {
"SC": false
}
并完成了ol /* globals: SC: true */
但是.jshinrc似乎没有做任何事情,评论让我得到了'SC' was used before it was defined.
我没有JavaScript专家......但我知道SC是一个对象......但它也存储在一个变量中......所以 - 看起来它应该像普通变量一样工作。 ..
我做错了什么?或者这只是我必须忍受的事情?代码全部按预期运行......:)???
答案 0 :(得分:4)
SC
在soundcloud JavaScript SDK window
内的window.SC=window.SC||{}
对象中定义。SC
。有一个旧的github issue关于JSHint识别这种全局对象的麻烦,因为它通常不执行代码而是分析代码。告诉JSHint关于predef
存在必须解决问题。 JSHint documentation中描述了正确的语法。您应该使用.jshintrc文件中的{
"predef": [ "SC" ]
}
属性来定义变量:
/* global SC */
或使用这样的内联配置:
SC
更新:如果您使用的是CodeKit,请尝试set globals using CodeKit UI。您需要在项目设置中添加$> nil > -1
NoMethodError: undefined method `>' for nil:NilClass
- &gt;语法Checkers - &gt;自定义Globals文本字段。看起来CodeKit目前使用自定义JSHint配置,并通过.jshintrc in not supported进行配置。
答案 1 :(得分:2)
看起来您不包含soundcloud api js文件,这可能是导致此问题的原因。
答案 2 :(得分:0)
在编译的js中初始化SC似乎有问题,因此SC是&#34;迟到&#34;并在该电话后初始化。你试过在另一个浏览器?结果是否相同?
如果它是相同的,这可能是你的问题的某种黑客解决方案:
var BBB = new require('../bbb.js');
然后在if ( typeof require === 'object' ) {
var BBB = new require('../bbb.js');
}
的前一个地方,您拨打//create a function so we can arrange a timer on it
function streamingReady(){
if (type of SC != 'undefined') {
SC.whenStreamingReady( function() {
console.log('TOP DOWN');
});
} else {
setTimeout(streamingReady, 200);
}
}
希望有所帮助
答案 3 :(得分:0)
如果有相同的错误,SC需要时间加载,我最终使用了这个代码模式:
WaitForSoundcloud();
function WaitForSoundcloud() {
if(typeof SC == "undefined") {
setTimeout(WaitForSoundcloud, 500);
} else {
SC.initialize({
client_id: 'xxxxxxxx'
});
SC.oEmbed(track_url, {}).then(function(oEmbed) {
console.log('oEmbed response: ', oEmbed);
});
}
}