TinyMCEのプラグインを作成していますが、jQueryを使用して、編集中のドキュメントを操作したいと考えています。
私はjQueryでTinyMCEを使用する方法(たとえば、セレクターの.tinymce()メソッド)を探していません。そのための解決策があることを知っています。
基本的に、TinyMCEによって生成されたiframeにjQueryを含める必要があります。
tinymce.dom.ScriptLoaderは、iframeではなく親ウィンドウに読み込まれるようです。そのため、これはオプションではありません。
私がこれまでに試したこと:
- 親およびプラグインコンテキストでScriptLoaderを介してjqueryをロードします(後者はまったく効果がなく、前者は間違ったコンテキストでロードします)
- 未定義のwindow.parent。$にアクセスします(親ウィンドウにロードされている場合でも)
- RTFMとグーグルがありますが、関連するヒットはありません。プラグインがダイアログを開いた場合、追加のJavaScriptをロードするオプションがありますが、それも私が必要としているものではありません。
TinyMCEプラグインでjQueryを使用している人はいますか?どのように?
更新/ソリューション
タリアマの提案のおかげで、私はこれを機能させることができました。明示的なtinymce.get()を使用してエディターを取得するか、プラグインのinit()メソッドに渡される「ed」インスタンスを使用できます。ただし、初期化段階自体では、(まだ)この方法で親にアクセスすることはできません。これは、特定のハンドラーで実行できます。
例えば
(function($) {
tinymce.create('tinymce.plugins.SOSamplePlugin', {
init: function(ed, url) {
$ = ed.getWin().parent.jQuery; // <- WON'T WORK!
ed.addCommand('soCmd', function(ui, v) {
if(e = ed.selection.getNode()) {
$ = ed.getWin().parent.jQuery; // <- WORKS!
$(e).wrap('<div class="sample" />');
ed.execCommand("mceRepaint");
}
});
ed.addButton('SO', {
title: 'Title',
cmd: 'soCmd',
image: 'somebutton.png'
});
},
getInfo: function() {
return {
longname: 'Example Plugin',
author: 'Ivo',
authorurl: 'http://vanderwijk.info/',
infourl: 'http://vanderwijk.info',
version: '1.0'
};
}
});
tinymce.PluginManager.add('so', tinymce.plugins.SOSamplePlugin);
})($);