TinyMCE路径,如何指定加载像editor_plugin.js这样的内容的位置

60

我安装了TinyMCE,一切都很顺利。然后我使用Google Closure将我的网站的JavaScript与TinyMCE_src打包在一起。

我现在遇到的问题是,TinyMCE正在调用:

plugins/paste/editor_plugin.js
themes/advanced/editor_template.js
langs/en.js

路径无效,导致页面返回404错误。我该如何告诉TinyMCE文件的正确位置?

我尝试了:

relative_urls : false,
document_base_url : "http://www.site.com/path1/",

但是它们对上面的文件没有影响。

有什么建议吗?谢谢。


在我的情况下,我没有使用类似于“Google Closure”的任何东西。我只想动态加载TinyMCE。我正在使用jquery.tinymce.js。当我加载TinyMCE时,Firebug会报错,很明显JQuery正在尝试加载类似于/_cms/products//langs/en.js而不是/tinymce/langs/en.js的内容。 - Hrant Khachatrian
当我打包我的JavaScript文件时,我遇到了相同的问题。查看TinyMCE源代码时,似乎它有几种不同的方法来查找基本地址以加载其模块。其中之一是在DOM中查找用于包括tiny_mce.js的地址。当将文件包含在bundle中时,这显然会失败。我通过在我的tinyMCE.init之前添加tinyMCE.baseURL来解决了这个问题。 - Andreas R
6个回答

103

我遇到了相同的问题,如果我们能够使用 document_base_url 指定 base url 的话,它本可以很容易地得到解决。

或者,我在初始化 tinymce 之前就能指定基本的 URL。

tinyMCE.baseURL = "URL_TO/tinymce/jscripts/tiny_mce/";// trailing slash important

tinyMCE.init({
        mode : "textareas",
        theme : "simple"
});

TinyMCE现在运行良好。


23
测试于最新的4.0b1版本,运行正常!同时,我不得不添加tinyMCE.suffix = '.min'; - dikirill
8
在4.0.16版本中,请勿添加尾部斜杠。 - Daniel W.
2
截至4.6.6版本,仍然有效。只需在tinymce.init({...});之前设置tinymce.baseURL = '/path/to/tinymce';即可。http://archive.tinymce.com/wiki.php/api4:property.tinymce.EditorManager.baseURL.static - Daerik
2
仍在使用 4.9.1 版本 - 我不得不同时使用 tinymce.baseURL = "/path/to/tinymce";tinyMCE.suffix = '.min'; 才能使其正常工作。 - Riz
1
6.0.0 版本开始,key 更改为 base_url: '/dist/tinymce' - Tobi G.
显示剩余3条评论

9

在初始化 tinyMCE 之前放置以下代码,即可覆盖 tinyMCE 的基础 URL。

var tinyMCEPreInit = {
    suffix: '',
    base: '/tinymce/',
    query: ''
};

如果你已经从合并的源加载了tinyMCE并且基本路径没有正确找到,这将非常有用。


3
var tinyMCEPreInit may have to be window.tinyMCEPreInit - huyz

9
根据此链接:http://www.tinymce.com/wiki.php/Configuration:theme_url
tinymce.init({
   ...
   theme_url: (document.location.pathname + '/js/tinymce/themes/modern/theme.js').replace("\/\/", "\/"),
   skin_url:  (document.location.pathname + '/js/tinymce/skins/lightgray/').replace("\/\/", "\/"),
   ...

但是,需要小心路径。使用 document.location.pathname 来获取项目根目录。替换函数需要将双斜杠替换为单斜杠,因为不同的服务器可能返回“...//server/site”或“...//server/site/”,并且它可以是:“...//server/site/js...”或“...//server/site//js...”。


对我有效的唯一方法是 document_base_urlrelative_urls 似乎没有起到任何作用。 - Marcos Lima

5

如果您正在使用TinyMCE jQuery插件,您可以从远程位置加载所有内容,只需将script_url参数添加到您的初始化代码中即可。它将从那里加载所有内容,包括任何脚本/图像等。

$('textarea').tinymce({
    script_url: 'http://tinymce.moxiecode.com/js/tinymce/jscripts/tiny_mce/tiny_mce.js'
});

看看这个fiddle,它从TinyMCE网站远程包含了整个东西:http://jsfiddle.net/xgPzS/22/


1
无法帮助:( 不知道原因,但JQuery没有调用有效的URL。我没有返回404,而是打印了请求的URL($ _SERVER ['REQUEST_URI']),Firebug显示以下错误:invalid regular expression flag p /_cms/products//themes/simple/editor_template.js(因为/,JQuery认为它是一个正则表达式 :)) - Hrant Khachatrian
这不是JS的问题,而是服务器的回复 :) 服务器只是打印JQuery试图访问的URL!JQuery“等待”JS代码,但是在请求的URL中不存在JS。 - Hrant Khachatrian
@Hrant Khachatrian: 你的php应该长这样: $('textarea').tinymce({script_url:'<?php echo $whatever_variable_with_your_script_path; ?>subdirectory/whatever.js' }); 如果你这么做,发送到浏览器的生成HTML将包含正确的脚本路径。请注意,在php标记之前和之后的字符串包装引号。 - DarthJDG
路径肯定是正确的。我也尝试了你的建议(script_url指向tinymce.moxiecode.com),但错误仍然存在。实际上,我似乎已经找到了这个问题的原因...在仔细检查后,我会在这里发布它。 - Hrant Khachatrian

2
根据 TinyMCE 4.x 的文档,您可以在初始化期间指定文档基本 URL。
tinymce.init({
        document_base_url: "http://www.example.com/path1/"
});

如果您正在使用CodeIgniter,只需使用base_url()即可。
tinymce.init({
        document_base_url: "<?php echo base_url() ?>"
});

请记住:relative_url必须设置为true才能正常工作,否则将得到绝对URL。

更多详情请参考: http://www.tinymce.com/wiki.php/Configuration:document_base_url


2

使用grunt捆绑所有内容(在GitHub上有说明),然后您只需使用选项skin_url配置从哪里加载所有css即可。

tinymce.init({skin_url: window.location.origin + '/css/tinymce'})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接