我有一个网站:
<body onload="ajaxLoad()" >
我有一个javascript函数,然后使用textarea的setContent
javascript方法将数据从我的数据库插入到文本编辑器中。它似乎在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's Corner</span></strong></p><p style="text-align: center;">August 2009</p><p>It’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’t missed evening, shas extended it one additional week. The last clinic will be the week of August 11<sup>th</sup>. </p><p> Alt (Tuesday through Thursday) </p><p> I wouClub.</p><p> </p><p> </p><p> </p><p> <strong></strong></p>');
}, 1);
}
我不确定Chrome是否拒绝了某些格式,但似乎TinyMCE可以在一个浏览器中解析它,它应该可以在任何浏览器中执行,所以我很困惑。
有什么建议吗?
答案 0 :(得分: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()
被讨论到行为方式不同,请参阅{{3>}中的何时加载?。有关Chrome特定问题的另一种说明可以在Is Safari faster?中找到,但无需解释。
总而言之,我怀疑{DOM}实际加载之前会发出onload()
,至少关于TinyMCE的要求,这对于像这样的问题是非常脆弱的,只是停止加载。
可能的解决方案:
仅window.onload not working correctly in Chrome {{}}}中列出的defer
标记上的属性script
只是不能跨浏览器兼容,因此我只是采用广泛部署且经过验证的方法来使用已经提到window.onload not working correctly in Chrome,这无论如何都是一种好的做法,原则上也应该处理你的反问题。
<强>更新强>
确实有一些针对jQuery cross browser solution for the onload()
problem提出的错误可以支持我的结论(无论这种行为是否真的构成错误或是故意的),请参阅:
答案 1 :(得分:3)
我有一个类似的问题(编辑器没有在chrome中显示)并在某个论坛中读到,如果tinyMCE无法找到某些文件,它就会停止加载。尝试使用firebug的网络标签查找所有内容(首先清除缓存)。
答案 2 :(得分: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>";
希望你好运!
答案 3 :(得分:2)
解决方案:
我一直在努力与TinyMCE工具栏没有出现在各种各样的secnarios ....它可以在一个用户的IE浏览器,但不是另一个。它不适用于Firefox或Chrome等。
原来,如果在最新的3.3版本中存在仍未修复的STILL错误。当您在网页JavaScript代码中实例化TinyMCE时,如果您为插件部分添加了两个特定插件的代码,则会出现这种情况,工具栏无法显示,您会看到HTML: 插件:
"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**",
删除网页中对imagemanager
和filemanager
的所有引用,然后刷新浏览器...
当你这样做时,重新测试Chrome和Firefox以及IE和TinyMCE突然出现!哇....奇迹,是吗?
原来他们的“主要开发人员”没有解决问题,但确实如此解释,如果你想尝试仍然使用这些插件,但仍然解决问题。他的引言如下:
“如果ImageManager / FileManager是旧的,他们可能不会使用新的 scriptloader api。而新的3.3版本将加载所有依赖 脚本异步而不是同步。 - Spocke - TinyMCE的主要开发者“
答案 4 :(得分:1)
有几种方法可以在TinyMCE编辑器中设置内容。如果您希望在首次加载页面时内容存在,您可以将其放在标记之间。
否则,您可以通过以下方式通过脚本执行此操作:
window.onload = function(){
tinyMCE.getInstanceById( “ProfileText”)setContent( '测试');
};
我已将代码包装在window.onload块中。如果你有其他功能在TinyMCE编辑器加载后通过这种方式动态设置内容,那么你就不需要了。
答案 5 :(得分:1)
函数oninit
有一个选项tinyMCE.init()
,将您的方法放在那里:
tinyMCE.init({
oninit: function(){
tinyMCE.activeEditor.setContent('blah');
}
});
它以这种方式工作。
编辑器未在document load
事件上完全加载,因为编辑器加载器将后加载一堆文件。
答案 6 :(得分:0)
这里也是同样的问题,即需要
var ed = tinyMCE.get('content');
ed.setContent('zzz');
其他浏览器
document.getElementById("content").innerHTML="zzz";
我非常失望
需要在javascript中检查浏览器才能使其正常工作,那就是suxx