16

我有 tinyMCE 在 django 管理员中工作,但所有弹出窗口都是空白的(例如,编辑 HTML,添加图像)

弹出 html 页面的路径都存在于正确的位置

http://thatch.media/js/tiny_mce/themes/advanced/source_editor.htm?mce_rdomain=thatch

整个js文件夹的权限设置为777

这是我的模特

class Page(models.Model):
    title = models.CharField(max_length=200)
    ...

    class Admin:
        js = ('js/tiny_mce/tiny_mce.js', 'js/textareas.js')

有任何想法吗?

4

10 回答 10

19

我也遇到了这个问题,使用 Amazon S3 存储桶来存储包括 TinyMCE javascript 在内的静态媒体。

更明确地说,您的静态媒体必须位于主站点的子域中。因此,如果您的网站在 foo.bar.com 上运行——您的静态媒体必须在 static.foo.bar.com 之类的东西上——请注意 static.bar.com 和 static-foo.bar.com 不会好的。(如果您的网站在 bar.com 上,那么 static.bar.com 就可以了。)

因此,一旦您从子域中提供静态媒体(对于 S3,请参阅Amazon S3:静态网站:自定义域或子域,这对我有帮助),然后您需要在 javascript 中的两个位置设置 document.domain:

1) 在 tiny_mce_popup.js

2) 在 tiny_mce.js 之前的任何其他内容,或者,在 tiny_mce.init() 调用发生之前的某个脚本标记中的主页渲染 HTML 中。(我发现破解 tiny_mce.js 并将其重新上传到 S3 比使用 django-tinymce 的小部件渲染更方便。)

您需要在两个地方都将 document.domain 设置为 MAIN SITE 的域:因此,对于 foo.bar.com 的站点,静态媒体位于 static.foo.bar.com,您需要设置 document.domain = " foo.bar.com"

这应该可以防止浏览器中出现任何安全异常,并且现在一切正常。

于 2011-09-13T21:36:19.960 回答
12

我在 Heroku 上运行我的 django 应用程序并使用 Rackspace CDN 时遇到了这个问题。我的静态文件设置都设置为使用 rackspace CDN 共享文件

  • 解决方案是使用普通静态文件服务于特定的 tinymce 文件:

    class Media:
    js = [
        '/static/grappelli/tinymce/jscripts/tiny_mce/tiny_mce.js',
        '/static/grappelli/tinymce_setup/tinymce_setup.js',
    ]
    

在我的网址配置中:

urlpatterns += patterns('',
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_ROOT,
    }),

)

static.serve 函数允许您在标准静态设置之外提供静态文件。您可以将 url conf 中的静态更改为您想要的任何内容。

于 2012-04-13T23:19:11.800 回答
6

如果这是 TinyMCE 的 JQuery 版本,并且您正在从另一台服务器向运行 Django 的服务器提供媒体(包括 TinyMCE .js 文件),这可能适用:您的浏览器将阻止 TinyMCE 脚本访问 Django 管理员来自提供 TinyMCE 的域的 URL。Safari 的错误控制台是最明确的,例如:

Unsafe JavaScript attempt to access frame with URL http://127.0.0.1/~whatever/django-templates/javascript/tiny_mce/jscripts/more stuffhere/anchor.htm
from frame with URL http://127.0.0.1:8000/admin/flatpages/flatpage/1/.
Domains, protocols and ports must match.

文件中有一个设置tiny_mce_popup.js说明:

// Uncomment and change this document.domain value if you are loading the script cross subdomains
// document.domain = 'moxiecode.com';

但这对我不起作用。您可以尝试打破规则并从 Django 服务器提供 TinyMCE 脚本,或者将脚本添加到修改后的管理模板的 HTML 中……但我确信有更好的解决方案。我没有耐心尝试,虽然我确定它已经完成,但我找不到让 TinyMCE 跨域工作的解决方案。

然而,由于用户可以使用可视化编辑器生成可怕的 HTML/内联 CSS 修改,其他解决方案可能会更好:Textile(Ruby 的 Redcloth 提供可视化反馈- 也许有基于PyTextilePython-Textile的类似 Python 实现??),或者标记!(JQuery,所以可能会出现同样的问题)它有一个很好的可视化编辑工具栏。

如果您怀疑这种远离“类似文字”的编辑器的做法,<- 该链接是关于该问题的好文章。

后记:在WMD中有一个很好的 Markdown Javascript 实现,它提供了一个类似于 TinyMCE 的工具栏、语义标记样式(所见即所得- '所见即所得')编辑器快捷方式。GitHub 使用了相关的解决方案

于 2009-07-21T11:25:19.693 回答
5

我发现最好的解决方案是通过设置从项目根目录或媒体目录提供 tiny_mce 媒体:

TINYMCE_JS_URL = '%stiny_mce/tiny_mce.js' % MEDIA_URL
于 2013-02-10T15:27:56.623 回答
3

检查设置文件中的 MEDIA_URL。如果设置为非相对路径,即Django 推荐的http://site.com/media_url,tiny_mce将弹出空白页面。将此设置为相对路径,它应该可以工作。

有关详细信息,请参阅http://pageworthy.com/blog/2009/mar/09/tiny_mce-blank-popups/ 。

于 2009-03-10T05:28:55.000 回答
2

我遇到了空白弹出问题。就我而言,问题在于将它们放在另一个子域中。不确定是不是你的情况。

我通过编辑 tiny_mce_popup.js 并添加解决了

document.domain = window.location.hostname.replace('static.','');

当然用您的子域替换静态以获得“domain.com”字符串

然后在将 .tinymce(...) 附加到您的元素之前再次定义 document.domain。根据您所在的位置,您可以使用服务器端脚本或上面的相同代码。从这里的网站查看 wiki http://tinymce.moxiecode.com/wiki.php/How-to_load_TinyMCE_crossdomain

于 2011-07-05T15:26:11.530 回答
1

我将媒体从http://thatch.media更改为http://thatch/media ,现在它可以工作了

也许与处于不同领域有关?

于 2009-02-21T03:58:13.423 回答
1

有同样的问题,我对所有 js / css 等都使用 Amazon S3,所以相对 url 不是一个选项。

为了使它工作,我不得不编辑 - tiny_mce_popup.js 和 tiny_mce.js,在顶部添加以下行:

document.domain = 'moxie.org';

希望这可以帮助 ...

于 2009-07-17T04:26:59.143 回答
1

我输入了您的答案,因为我遇到了同样的问题。第一个答案帮助我理解了问题,但没有解决它。

所以...您将代码上传到heroku,从那里尝试打开使用TinyMCE弹出窗口的.js,但是静态文件(因此弹出窗口使用的.js)被上传到另一个主机(在我的情况下S3)。

所以我调查了一下,发现了这个解决方案: https ://devcenter.heroku.com/articles/django-assets 顺便说一句,它就像一个魅力,我的项目已经开始工作了!

所以,基本上,你所做的就是将你的静态文件和你的代码一起上传到同一个地方,这样你就不会违反同源策略。

于 2015-08-14T18:17:09.170 回答
0

您还必须在配置文件中更改 tiny_mce_popups.js 中的 document.domain。此处描述了这些程序:

http://wiki.moxiecode.com/index.php/TinyMCE:Cross_domain_loading

希望这有帮助。

于 2009-10-22T18:50:48.720 回答