如何修复Google Chrome中的DOMException错误?

时间:2019-05-13 09:26:24

标签: html5 typescript google-chrome

我在浏览器游戏中处理声音。我写了声音管理器。一切正常,但不能在Google chrome中使用。在声音在50%的情况下播放之后,我处理了“未捕获(承诺)domexception”错误,在其他情况下,它返回错误DOMException。可能是什么问题?

export class AudioFile{
    private audio: HTMLAudioElement;
    private fileMP3: string;
    private fileOGG: string;
    private volume = 1;
    private loop = false;
    constructor(MP3:string, OGG:string) {
        this.audio = new Audio();
        this.fileMP3 = MP3;
        this.fileOGG = OGG;
        this.audio.canPlayType('audio/mpeg') ? this.audio.src = this.fileMP3 : this.audio.src = this.fileOGG;
        this.audio.load();
        this.audio.volume = this.volume;
        this.audio.loop = this.loop;
    }
    public play() {
        this.audio.currentTime = 0;
        const playPromise = this.audio.play();
        if (playPromise !== undefined) {
            playPromise.then(_ => {
            })
            .catch(error => {
                console.log(error);
            });
        }
    }
    public stop() {
        this.audio.pause();
    }
}
``````````````sound manager`````````````
export class SoundManager {
    private sounds = new Map();
    private static _soundManager: SoundManager;
    constructor(){
        if (SoundManager._soundManager) {
            throw new Error("Instantiation failed: "+
            "use Singleton.getInstance() instead of new.");
        }
        SoundManager._soundManager = this;
    }
    public static get instance(): SoundManager {
        if (this._soundManager)
            return this._soundManager;
        else
            return this._soundManager = new SoundManager();
    }
    preload() {
        const pathMP3 = SoundConfig.PATHMP3;
        const pathOGG = SoundConfig.PATHOGG;
        for (const item in SoundConfig.SOUNDS) {
            const name = SoundConfig.SOUNDS[item].NAME;
            this.sounds.set(name, new AudioFile(pathMP3 + name + '.mp3', pathOGG + name + '.ogg'));
        }
    }
    getSound(id: string): AudioFile {
        return this.sounds.get(id);
    }
}

1 个答案:

答案 0 :(得分:1)

谢谢您的投资。

error: DOMException code: 0 message: "play() failed because the user didn't interact with the document first.

游戏贯穿iframe,需要我添加自动游戏的功能政策。

<iframe src="..." allow="autoplay">

帮助我解决问题的article