我正在为 TinyMCE 编写一个插件,我想使用 jQuery 对正在编辑的文档进行一些操作。
我不是在寻找一种将 TinyMCE与jQuery 一起使用的方法(例如,选择器上的 .tinymce() 方法),我知道有解决方案。
基本上我需要在 TinyMCE 生成的 iframe 中包含 jQuery。
tinymce.dom.ScriptLoader 似乎加载在父窗口中,而不是在 iframe 中,所以这不是一个选项。
到目前为止我已经尝试过:
- 在父和插件上下文中通过ScriptLoader加载jquery(后者完全没有效果,前者加载到错误的上下文中)
- 访问window.parent.$,它是未定义的(即使它是在父窗口中加载的)
- RTFM'ing 和谷歌搜索,但没有相关的点击。如果插件打开一个对话框,则可以选择加载其他 javascript,但这也不是我需要的。
有人在 TinyMCE 插件中使用 jQuery 吗?如何?
更新/解决方案
感谢 Thariama 的建议,我能够让它发挥作用。您可以使用显式 tinymce.get() 来获取编辑器,也可以使用传递给插件的 init() 方法的“ed”实例。然而事实证明,在 init 阶段本身你不能(还)以这种方式访问父级。您可以在特定的处理程序中执行此操作。
例如
(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);
})($);