' SC'使用soundcloud SDK时未定义

时间:2015-06-18 03:48:19

标签: javascript soundcloud jshint

使用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是一个对象......但它也存储在一个变量中......所以 - 看起来它应该像普通变量一样工作。 ..

我做错了什么?或者这只是我必须忍受的事情?代码全部按预期运行......:)???

4 个答案:

答案 0 :(得分:4)

SCsoundcloud 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);
        });
    }

}