Как заставить всплывающее окно TinyMCE работать на Django, где «статические» и «динамические» страницы обслуживаются из разных доменов? - PullRequest
4 голосов
/ 27 августа 2009

У меня проблема с TinyMCE и Django. Я использую модуль TinyMCE для базовой поддержки полей формы.

Проблема возникает, когда TinyMCE хочет использовать всплывающее окно:

В моей среде разработки статические страницы обслуживаются с

static.wdw.ms.local: 8888

и страницы Django обслуживаются с wdw.ms.local: 8000

(В процессе работы .local: XXXX удаляется)

Если я нажму на кнопку редактирования в html (или проверку орфографии, или что-нибудь, что имеет всплывающее окно), всплывающее окно не будет выполнено. Firebug говорит мне, что "tinymce". имеет значение null (объект tinymce)

Я отредактировал tiny_mce_popup.js и попробовал эти настройки

document.domain = 'wdw.ms.local: 8000'; а также 'wdw.ms.local', 'static.wdw.ms.local', 'static.wdw.ms:8888'

Все они выдают эту ошибку (как видно из Firebug):

Permission denied for <http://wdw.ms.local:8000> to get property Window.tinymce from     <http://wdw.ms.local:8000>.
[Break on this error] var tinymce=null,tinyMCEPopup,tinyMCE;ti...nyMCEPopup.init();    
tinyMCEPopup._wait();\ntiny_mce_popup.js (line 5)

Есть идеи, как заставить это работать?

(Подобные вопросы задавались здесь и раньше, но все решения включали изменение этого параметра document.domain, что мне не подходит. Если вы посмотрите в комментариях к этим похожим вопросам, вы заметите, что многие другие люди не смогли заставить это работать)

Ответы [ 3 ]

2 голосов
/ 15 сентября 2009

Добавьте его перед вызовом tinyMCE.init на вашей странице:

document.domain = 'mydomain.com';
tinyMCE.init({
   ...
});

А затем измените значение в: tiny_mce_popup.js на:

document.domain = 'mydomain.com'; 

Примечание: это решение работает для меня на веб-сайте Django.

Ссылка: http://wiki.moxiecode.com/index.php/TinyMCE:Cross_domain_loading

0 голосов
/ 11 июня 2010

Изменение настройки document.domain будет работать только в том случае, если вы используете субдомены, а не разные корневые домены или разные порты. Таким образом, server1.mydomain.com и server2.mydomain.com могут быть использованы, если вы зададите для document.domain mydomain.com, но вы никогда не сможете заставить server1.com и server2.com работать вместе, так же как вы не можете получить mydomain .com: 8888 и mydomain.com:8000 для совместной работы.

Что вы можете сделать, так это использовать mod_proxy с Apache для пересылки определенных запросов на сервер разработки django, одновременно обслуживая другие запросы. Это можно сделать с виртуальными хостами на основе имен, чтобы вы могли использовать один и тот же порт, но отображать два субдомена в одном домене или даже просто перенаправлять / не перенаправлять определенные каталоги.

Полная ссылка на mod_proxy: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html, но я также написал, как использовал mod_proxy для передачи некоторых, но не всех запросов от Apache на IBM Portal на http://www.symphonious.net/2008/07/08/creating-clean-urls-with-ibm-wcm/ (включает некоторые перезаписи URL, которые, надеюсь, вам не понадобятся).

С уважением,

Адриан Саттон
http://tinymce.ephox.com

0 голосов
/ 27 августа 2009

Для сервера разработки вы должны предоставить статический контент в том же домене (wdw.ms.local), что и ваши страницы django, если вы хотите, чтобы tinymce работал (у меня была похожая проблема с другой библиотекой JS, которая создает всплывающие окна под названием greybox). Используйте что-то вроде этого в url.py:

(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/static'}),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...