soundmanager2.js + require.js无法使用firefox + adblock plus

时间:2013-07-28 13:59:04

标签: javascript html5 flash requirejs soundmanager2

启用AdBlock Plus时,

无法使用Firefox 22.0进行以下测试。当我禁用adblock时,Chrome +上运行正常。当我使用脚本标记而不是requirejs加载脚本时,它也有效。

./ index.html的:

<!DOCTYPE html>
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">

<link rel="stylesheet" type="text/css" href="css/main.css"/>
<!--<link rel="icon" type="image/png" href="img/icon.png"/>-->

<!--<script  src="js/lib/jquery.js"></script>-->

<script data-main="js/main" src ="require.js"></script>
<!--
<script src="js/lib/soundmanager2.js"></script>
<script src="js/test.js"></script>
-->

<title></title>
</head>


<body>

<div id="stop" style="cursor:pointer;"> stop</div>

</body>


</html>

./ JS / main.js:

require.config({
    paths:{
        jquery:"lib/jquery",
        underscore:"lib/underscore",
        soundmanager2:"lib/soundmanager2"
        /*backbone:"lib/backbone",
        detectmobilebrowser:"lib/detectmobilebrowser"*/
    },
    shim: {
        'underscore': {
            exports: '_'
        },
        'soundmanager2':{
            exports:"soundManager"
        }
    }
});


define(['jquery','underscore',"soundmanager2"],
function($,_,soundManager){    
alert("hep");
    window.soundManager=soundManager;
    soundManager.setup({
        url: 'swf',
        useHTML5Audio:true,
        preferFlash: false, // prefer 100% HTML5 mode, where both supported
        onready: function() {

            alert('SM2 ready!');
            /*
            soundManager.createSound({
                id: 'mySound',
                url: './test/test.mp3',
                autoLoad: true,
                autoPlay: false,
                onload: function() {
                    soundManager.play('mySound');
                },
                volume: 50
            });
            */


        },
        ontimeout: function() {
            alert('SM2 init failed!');
        },
        defaultOptions: {
            // set global default volume for all sound objects
            volume: 100
        }
    });

    $("#stop").on("click",function(){
        alert("stop");
        soundManager.stop("mySound");
    });

    return soundManager;
});

控制台中没有错误或任何内容,在初始'hep!'之后没有警报之一。

2 个答案:

答案 0 :(得分:0)

经典模式,与某些问题争斗数小时,放弃并寻求帮助,在发布后立即找到解决方案。

加入

soundManager.beginDelayedInit();

在soundManager.setup()之后,现在可以正常工作。

答案 1 :(得分:0)

使用RequireJS的require()方法加载模块。在回调中编写你需要的代码。请注意,function的参数是一个包含加载依赖项的路径的数组

require.config({
paths:{
    jquery:"lib/jquery",
    underscore:"lib/underscore",
    soundmanager2:"lib/soundmanager2"
    /*backbone:"lib/backbone",
    detectmobilebrowser:"lib/detectmobilebrowser"*/
},
shim: {
    'underscore': {
        exports: '_'
    },
    'soundmanager2':{
        exports:"soundManager"
    }
}
});


require(['jquery','underscore',"soundmanager2"],function($,_,soundManager){    
    alert("hep");
    window.soundManager=soundManager;
    soundManager.setup({
        url: 'swf',
        useHTML5Audio:true,
    preferFlash: false, // prefer 100% HTML5 mode, where both supported
    onready: function() {

        alert('SM2 ready!');
        /*
        soundManager.createSound({
            id: 'mySound',
            url: './test/test.mp3',
            autoLoad: true,
            autoPlay: false,
            onload: function() {
                soundManager.play('mySound');
            },
            volume: 50
        });
        */


    },
    ontimeout: function() {
        alert('SM2 init failed!');
    },
    defaultOptions: {
        // set global default volume for all sound objects
        volume: 100
    }
    });

    $("#stop").on("click",function(){
        alert("stop");
        soundManager.stop("mySound");
    });


});