2009-08-23 37 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事件中,因为它的编辑器加载器将后加载一堆文件。