TinyMce不呼叫audio_template_callback,而是呼叫video_template_callback

时间:2018-08-01 02:55:16

标签: laravel-5 tinymce tinymce-4

我正在将TinyMce编辑器与laravel 5.6和laravel-elfinder一起使用。我必须上传音频文件,但编辑器无法识别音频文件,因此通过调用video_template_callback将其呈现为视频格式。因此,我将editor_config更改为:

var editor_config = {
            selector: "textarea",
            plugins: [
            "image link lists textcolor imagetools table codesample textpattern media code"
            ], 
            video_template_callback: function(data){
                console.log('call video');
                return '<audio controls>' + '\n<source src="' + data.source1 + '"' + (data.source1mime ? ' type="' + data.source1mime + '"' : '') + ' />\n' + '</audio>';
            },
            audio_template_callback: function(data) {
                console.log('call audio');
                return '<audio controls>' + '\n<source src="' + data.source1 + '"' + (data.source1mime ? ' type="' + data.source1mime + '"' : '') + ' />\n' + '</audio>';
            },
            toolbar: "insertfile undo redo | styleselect | bold italic strikethrough | alignleft aligncenter alignright alignjustify | ltr rtl | bullist numlist outdent indent removeformat formatselect| link image media | emoticons charmap | code codesample | forecolor backcolor",
            browser_spellcheck: true,
            relative_urls: false,
            remove_script_host: false,
            media_poster: false,
            media_filter_html: false,
            file_browser_callback : function(field_name, url, type, win) {

                tinymce.activeEditor.windowManager.open({
                    file: '<?= route('elfinder.tinymce4') ?>',// use an absolute path!
                    title: 'File Manager',
                    width: 900,
                    height: 450,
                    resizable: 'yes'
                }, {
                    setUrl: function (url) {
                    win.document.getElementById(field_name).value = url;
                    }
                });
            },
            setup:function(ed) {
                ed.on('change', function(e) {
                    console.log('the content ', ed.getContent({ format: 'text' }));
                });
            }
        };
    [![tinymce.init(editor_config);][1]][1]

测试此设置时,控制台仅输出“呼叫视频”。

1 个答案:

答案 0 :(得分:0)

在当前版本的TinyMCE(4.8.1)中,如果您查看媒体插件的代码,则会看到以下部分:

if (data.type === 'iframe') {
    return getIframeHtml(data);
} else if (data.source1mime === 'application/x-shockwave-flash') {
    return getFlashHtml(data);
} else if (data.source1mime.indexOf('audio') !== -1) {
    return getAudioHtml(data, audioTemplateCallback);
} else if (data.type === 'script') {
    return getScriptHtml(data);
} else {
    return getVideoHtml(data, videoTemplateCallback);
}

为了使某些东西作为音频触发,其mime类型需要包含字符串audio。如果所有其他测试均未通过,则将其视为“视频”,因此我的猜测是该文件上的mime类型不包含字符串audio