web-dev-qa-db-ja.com

TypeError:window.tinyMCE.execInstanceCommandは関数ではありません

ワードプレスエディタにショートコードを追加することはできません。それが示している -

TypeError:window.tinyMCE.execInstanceCommandは関数ではありません

window.tinyMCE.execInstanceCommand(id、 'mceInsertContent'、false、ショートコード)これを解決するために私を助けてください。フルコード: -

function submitData($form) {
    try {
        $form = $form || jQuery('form');
        if(window.tinyMCE) {
            var selectedContent = tinyMCE.activeEditor.selection.getContent(),
                id = tinyMCE.activeEditor.editorId || 'content',
                shortcodeName = $form.attr('name'),
                shortcode = ' [' + shortcodeName + ' ';

            $form.find('[data-name]').each(function() {
                var $this   =   jQuery(this),
                    type    =   $this.data('type'),
                    value   =   ($this.attr('type') == 'checkbox')
                            ?   ($this.is(':checked')) ? 'on' : ''
                            :   $this.val() || '';
                value = fitValue(type, value);
                shortcode += $this.data('name') + '="' + value + '" ';
            });
            shortcode += ']' + selectedContent + '[/' + shortcodeName + '] ';

            window.tinyMCE.execInstanceCommand(id, 'mceInsertContent', false, shortcode)
            tinyMCEPopup.editor.execCommand('mceRepaint');
            tinyMCEPopup.close();
        }
    } catch (e) {
        console.error(e);
    }
    return;
}
1
user3626111

https://stackoverflow.com/questions/22813970/typeerror-window-tinymce-execinstancecommand-is-not-a-function

ありがとう Scott B

Wordpress 3.9では、TinyMCEはバージョン4に更新され、TinyMCE 4では、メソッド "execInstanceCommand"がメソッド "execCommand"に置き換えられました。

(古いバージョンのWPとの)互換性の問題のためには、TinyMCEバージョンをチェックして適切な方法を使用しなければなりません。

以下で、私はあなたのコードを変更しました。コメント付きのコード行は私のものです。

function submitData($form) {
    try {
        $form = $form || jQuery('form');
        if(window.tinyMCE) {

            /* get the TinyMCE version to account for API diffs */
            var tmce_ver=window.tinyMCE.majorVersion;

            var selectedContent = tinyMCE.activeEditor.selection.getContent(),
                id = tinyMCE.activeEditor.editorId || 'content',
                shortcodeName = $form.attr('name'),
                shortcode = ' [' + shortcodeName + ' ';

            $form.find('[data-name]').each(function() {
                var $this   =   jQuery(this),
                    type    =   $this.data('type'),
                    value   =   ($this.attr('type') == 'checkbox')
                            ?   ($this.is(':checked')) ? 'on' : ''
                            :   $this.val() || '';
                value = fitValue(type, value);
                shortcode += $this.data('name') + '="' + value + '" ';
            });
            shortcode += ']' + selectedContent + '[/' + shortcodeName + '] ';

            /* Check for TinyMCE version */
            if (tmce_ver >= 4) {
                /* In TinyMCE 4, we must be use the execCommand */
                window.tinyMCE.execCommand('mceInsertContent', false, shortcode);
            } else {
                /* In TinyMCE 3x and lower, we must be use the execInstanceCommand */
                 window.tinyMCE.execInstanceCommand(id, 'mceInsertContent', false, shortcode);
            }
            tinyMCEPopup.editor.execCommand('mceRepaint');
            tinyMCEPopup.close();
        }
    } catch (e) {
        console.error(e);
    }
    return;
}
2
Mr.HTZ