2009-08-23 83 views
4

我有,我把一個網站:TinyMCE的不是Chrome時我動態setContent

<body onload="ajaxLoad()" > 

我有一個JavaScript函數,然後使用setContent的JavaScript方法從我的數據庫中插入數據的文本編輯器textarea。在Firefox和IE中似乎很好,但在Chrome中有時沒有任何顯示。沒有錯誤,只是一個空白的編輯器。

在主體部分我:

<textarea id="elm1" name="elm1" rows="40" cols="60" style="width: 100%"> 
</textarea> 

在頭部分,我有:

function ajaxLoad() { 
     var ed = tinyMCE.get('elm1'); 
     ed.setProgressState(1); // Show progress 
     window.setTimeout(function() { 
      ed.setProgressState(0); // Hide progress 
      ed.setContent('<p style="text-align: center;"><strong><br /><span style="font-size: small;">General Manager&#39;s Corner</span></strong></p><p style="text-align: center;">August&nbsp;2009</p><p>It&rsquo;s been 15<sup>th</sup> and so have a Steak Night (Saturday, 15<sup>th</sup>) and a shore Dinner planned (Saturday, 22<sup>nd</sup>) this month. urday, September 5<sup>th</sup>. e a can&rsquo;t missed evening, shas extended it one additional week. The last clinic will be the week of August 11<sup>th</sup>. </p><p>&nbsp;Alt (Tuesday through Thursday) </p><p>&nbsp;I wouClub.</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;<strong></strong></p>'); 
     }, 1); 
    } 

我不知道,如果它的一些Google Chrome的拒絕格式,但它似乎像如果TinyMCE可以在一個瀏覽器中解析它,它應該可以在任何瀏覽器中完成,所以我很困惑。

有什麼建議嗎?

+0

您能否指定您正在使用的TinyMCE和Chrome版本?這將有助於重現問題,特別是如果在我的答案中懷疑Chromes DOM實現和TinyMCEs需求之間的關聯(http://stackoverflow.com/questions/1318291/tinymce-not-working-with-chrome - 當-I-動態setcontent/1397118#1397118)。 – 2009-09-09 02:55:32

+0

tinymce 3.2.5 chrome beta channel – leora 2009-09-09 13:33:01

+0

你有沒有在windows上解決這個問題?我的意思不是onload問題..只是插入鉻。 – dyoser 2011-11-08 11:25:31

回答

9

背景:

由於種種原因onload()不被認爲是正確的方法進行加載JavaScript,例如參見Launching Code on Document Ready,最重要的/一個引人注目之處在於JavaScript代碼無法運行直到網頁完全下載完成,包括圖像等,因此可能需要永久性(例如,如果外部橫幅廣告服務器關閉等)。

相反,建議儘快在DOM準備就緒時加載Javascript,但不幸的是,沒有跨瀏覽器兼容的本地解決方案,請參閱Getting notified when the page DOM has loaded (but before window.onload);請注意,我的全部答案都基於最優秀的Javascript庫jQuery,它提供了cross browser solution for this problem,因此我肯定會贊成兩個更高的投票答案,而不是我自己接受的解決方案。

可能的原因:

您的問題似乎是相反的行爲雖然引起:Chrome利於WebKit渲染引擎,就像Safari,併爲後者onload()討論不同的行爲,見什麼時候加載火災? in Is Safari faster?。有關Chrome的這個問題的另一種描述可以在window.onload not working correctly in Chrome中找到,但沒有解釋。

總之,我懷疑onload()在DOM實際加載完成之前就會觸發,至少是關於TinyMCE的要求,TinyMCE對於像這樣的問題是非常脆弱的,並且只是停止加載。

可能的解決辦法:

就促進對作爲window.onload not working correctly in Chrome列出的script標籤屬性defer又是不是跨瀏覽器兼容的,所以我會簡單地使用已經提到的廣泛部署和經過驗證的方法去jQuery cross browser solution for the onload() problem,無論如何這是一個很好的做法,原則上也應該照顧你的反面問題。


更新:

確實有對抗WebKit可能回我的結論(不管這種行爲是否確實構成了一個bug或者是故意的)提起了一些錯誤,請參閱:

+1

確定它是onload問題的一種方法......但是setContent行爲仍然不適用於Windows上的chrome。 (它們的最新版本)使用tiny.get(「editor1」)。setContent('content')方法。 FF7報告在Windows系統(而不是在Linux)相同的問題煩人。 – dyoser 2011-11-08 11:26:51

+1

這可能不直接適用,但我正在研究一個在IE中運行良好的舊網站,但不會在FF或Chrome中設置內容。原來是因爲項目中存在過時的jQuery庫。我更新了它,現在它完美地工作 - 希望能幫助那裏的人! – deebs 2015-06-26 14:56:13

3

我有一個類似的問題(編輯器不顯示在鉻),並在一些論壇上閱讀,如果tinyMCE無法找到一些文件,它只是停止加載。如果使用螢火蟲的淨選項卡找到所有內容,請嘗試追蹤(首先清除緩存)。

+0

謝謝......救了我的一天 – 2012-02-29 11:39:08

+0

謝謝。 (錯誤)我在設置中使用這一行: content_css:「http://www.tinymce.com/tryit/css/example.css」, 顯然這個文件不再存在,TinyMCE停止工作我Chrome和Safari。我評論了這一行,並且在webkit瀏覽器中一切正常。 – 2013-05-03 11:25:25

2

首先;看到它你有最新版本的TinyMCE。

鑑於您提供的信息,我無法重現您的問題。這似乎很好(僞裝的ajaxload)。

你總是可以嘗試去「後入口」;

var myed = document.getElementById('elm1_ifr'); 
myed.contentDocument.getElementById('tinymce').innerHTML="<p style=\"text-align: center;\"><strong>hacking <span style=\"font-size: small;\">my</span> way in.</strong></p>"; 

希望你好運!

0

這裏同樣的問題,即需要

var ed = tinyMCE.get('content'); 
ed.setContent('zzz'); 

其他瀏覽器

document.getElementById("content").innerHTML="zzz"; 

我感到很disapointed

將需要JavaScript來檢查瀏覽器得到它正常工作,那就是suxx

1

有幾種方法可以在TinyMCE編輯器中設置內容。如果您希望內容在頁面第一次加載時存在,您可以將它放在標籤之間。

否則,您可以通過以下方式通過腳本來完成:

的window.onload =函數(){

tinyMCE.getInstanceById( 「ProfileText」)setContent( '測試')。

};

我把代碼包裝在一個window.onload塊中。如果在TinyMCE編輯器已經加載之後,您有其他功能通過這種方式動態設置內容,那麼您不需要這樣做。

2

SOLUTION:

我一直掙扎在各種secnarios不出現TinyMCE的工具欄....它會在一個用戶的IE瀏覽器的工作,而不是另一個。它不適用於Firefox或Chrome等。

原來,如果在最新的3.3版本中存在尚未修復的STILL錯誤。 插件:

"safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell, 
inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality, 
fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,**imagemanager,filemanager**", 
當你的網頁中的JavaScript代碼,你實例TinyMCE的,如果你加入了對插件部分在這裏裝載了兩個具體的插件代碼,工具欄沒有出現,你看到HTML,就會出現此一個

刪除所有與imagemanager,並在你的網頁filemanager,然後刷新瀏覽器......

當你這樣做,複試在Chrome和Firefox和IE和TinyMCE的突然出現!哇......奇蹟吧?

原來他們的「主要開發者」並沒有解決這個問題,但是如果你想嘗試並且仍然使用這些插件並解決問題,那麼這樣解釋也是如此。他引用如下:

「如果的ImageManager /文件管理是老,他們可能不會使用新 scriptloader API和新的3.3版本將裝入所有相關的 腳本異步,而不是同步 - Spocke - 主。 TinyMCE的的」

+1

對我來說,刪除'moxiemanager'這個技巧。之前在Chrome和Firefox中無法使用。現在確實如此。 – KJS 2013-08-01 21:22:57

1

開發商沒有爲功能tinyMCE.init()選項oninit,把你的方法有:

tinyMCE.init({ 
    oninit: function(){ 
     tinyMCE.activeEditor.setContent('blah'); 
    } 
}); 

它的工作原理本 辦法。

編輯器未完全加載到document load事件中,因爲它的編輯器加載器將後加載一堆文件。