Javascript &引用;错误:指定id“的引用已存在”;如何隐藏/修复此警报?

Javascript &引用;错误:指定id“的引用已存在”;如何隐藏/修复此警报?,javascript,android,cordova,Javascript,Android,Cordova,我正在开发一个音乐应用程序,如果我进入了可以播放声音的页面,请离开该页面,然后立即重新访问我收到的错误。 我在谷歌上搜索过这个问题,但似乎找不到任何类似的问题。 我正在为我的应用程序使用cordova媒体播放器和LowLatencyAudio插件。 下面是指定页面上的代码和我收到的错误图像。 任何帮助都将不胜感激,因为我很好,真的被卡住了 <div class="drum" id="bass" ontouchstart="play('bass');" ontouchend="touchEn

我正在开发一个音乐应用程序,如果我进入了可以播放声音的页面,请离开该页面,然后立即重新访问我收到的错误。 我在谷歌上搜索过这个问题,但似乎找不到任何类似的问题。 我正在为我的应用程序使用cordova媒体播放器和LowLatencyAudio插件。 下面是指定页面上的代码和我收到的错误图像。 任何帮助都将不胜感激,因为我很好,真的被卡住了

<div class="drum" id="bass" ontouchstart="play('bass');" ontouchend="touchEnd(event);">Bass</div>
    <div class="drum" id="highhat" ontouchstart="play('highhat');" ontouchend="touchEnd(event);">High Hat</div>
    <div class="drum" id="snare" ontouchstart="play('snare');" ontouchend="touchEnd(event);">Snare</div>
    <div class="drum" id="bongo" ontouchstart="play('bongo');" ontouchend="touchEnd(event);">Bongo</div>

<script type="text/javascript">

        var lla;

        function onBodyLoad() {     
            document.addEventListener("deviceready", onDeviceReady, false);
        }

        function onDeviceReady() {
            if( window.plugins && window.plugins.LowLatencyAudio ) {

                lla = window.plugins.LowLatencyAudio;   

                lla.preloadFX('assets/bass.mp3', 'assets/bass.mp3', function(msg){}, function(msg){ alert( 'Error: ' + msg ); });
                lla.preloadFX('assets/snare.mp3', 'assets/snare.mp3', function(msg){}, function(msg){ alert( 'Error: ' + msg ); });
                lla.preloadFX('assets/highhat.mp3', 'assets/highhat.mp3', function(msg){}, function(msg){ alert( 'Error: ' + msg ); });
                lla.preloadFX('assets/bongo.mp3', 'assets/bongo.mp3', function(msg){}, function(msg){ alert( 'Error: ' + msg ); });     
            }
        }

        function play(drum) {
            document.getElementById(drum).className = 'drum touched';
            lla.play('assets/' + drum + '.mp3');
        }

        function touchEnd(event) {
            event.target.className = 'drum';
        }

    </script>

对于同一资产多次调用
lla.prelofx
,它似乎遇到了问题。在阅读了插件文档和实际的java代码之后,这个错误实际上是一个警告/通知,而不是一个错误。我已经重新格式化了我的示例,以显示我将如何忽略此消息,因为它不会影响您的应用程序

以下是一个例子:

function onDeviceReady() {
   if( window.plugins && window.plugins.LowLatencyAudio) {

       lla = window.plugins.LowLatencyAudio;

       lla.preloadFX('assets/bass.mp3', 'assets/bass.mp3', function(msg){}, function(msg){ if(msg != 'A reference already exists for the specified audio id.') { alert( 'Error: ' + msg ); } });
   }
}

使用此代码,如果存在“真实”错误,您将看到一个错误,否则它将忽略有关已加载资源的消息。这应该可以解决问题。

无论何时启动应用程序并
prelofx()
尝试重新加载已加载的资源,实际上都可以使用deviceready事件调用函数
lla.prelofx
。因此,只需处理backbutton事件,就可以在应用程序退出时卸载资产

function onBodyLoad() {     
                document.addEventListener("backbutton", onBackButton, false);
            }
       function onBackButton() {
    var assets=['bass','snare','highhat','bongo'];
                for (x in assets) {
                    lla.unload(assets[x], function (msg) {}, function (msg) {});
                }
                navigator.app.exitApp();
            }

您可以添加到您的问题中,调用此警报的函数吗?我已经添加了位于同一文件中的javascript。虽然这确实修复了错误,但现在当我按下任何按钮时都不会播放声音,您的代码是否会中断预加载?在安装后初始加载时,我会收到类似的警报“指定ID的引用不存在。“尽管有4个不同的mp3文件,我还是连续收到三次。如果我重新访问一个页面,我仍然会得到最初的错误。好吧,我只是通读了插件的实际Android java代码,尝试多次加载资源确实有问题,所以你真正需要做的是在警告错误之前先检查错误是什么。如果错误是它已经存在,请忽略它。我会再次更新我的答案。好的,我理解第一部分,但我不确定第二部分,我如何看待错误之前的错误?对不起,我的话有点搞错了。您收到的消息不是任何代码不工作的错误,它只是一条让您知道文件已加载到内存中的消息。因此,您确实不需要捕获并显示该消息,因为它不会影响您的应用程序。在我提供的代码中,它检查消息是什么,如果出现实际错误,它将显示该消息,但它将忽略有关已加载文件的消息。
function onBodyLoad() {     
                document.addEventListener("backbutton", onBackButton, false);
            }
       function onBackButton() {
    var assets=['bass','snare','highhat','bongo'];
                for (x in assets) {
                    lla.unload(assets[x], function (msg) {}, function (msg) {});
                }
                navigator.app.exitApp();
            }