当我动态设置内容时,TinyMCE无法使用chrome

leo*_*ora 4 javascript google-chrome tinymce javascript-events

我有一个网站:

<body  onload="ajaxLoad()" > 
Run Code Online (Sandbox Code Playgroud)

我有一个javascript函数,然后使用setContenttextarea 的javascript方法将数据从我的数据库插入到文本编辑器中.它似乎在Firefox和IE中很好,但在Chrome中有时没有任何显示.没有错误,只是一个空白的编辑器.

在身体部分,我有:

  <textarea id="elm1" name="elm1" rows="40" cols="60" style="width: 100%"> 
</textarea>
Run Code Online (Sandbox Code Playgroud)

在头部我有:

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);
    }
Run Code Online (Sandbox Code Playgroud)

我不确定Chrome是否拒绝了它的某些格式,但似乎TinyMCE可以在一个浏览器中解析它,它应该可以在任何浏览器中执行,所以我很困惑.

有什么建议?

Ste*_*pel 9

背景:

由于各种原因onload()不被认为是加载Javascript的正确方法,例如参见在文档就绪上启动代码,其中最重要/最明显的是在页面完全下载之前Javascript代码不会运行,包括图像等因此,这可能需要一段时间(例如,如果外部横幅广告服务器关闭等).

相反,建议在DOM准备就绪后立即加载Javascript ,但不幸的是,没有与浏览器兼容的本机解决方案,请参阅页面DOM加载时(但在window.onload之前)获得通知 ; 请注意,我的整个答案都是基于最优秀的Javascript库jQuery,它提供了针对此问题跨浏览器解决方案,因此我绝对赞成对自己接受的解决方案的两个更高的投票答案.

可能的原因:

你的问题似乎是由相反的行为引起的:Chrome有助于WebKit渲染引擎,就像Safari一样,后者onload()的讨论行为也不同,请参阅何时onload fire?Safari中更快吗?.有关Chrome特定问题的另一个说明可以在window.onload中找不到在Chrome中无法正常工作,但没有解释.

总而言之,我怀疑onload()在DOM实际完全加载之前要开火,至少关于TinyMCE的要求,这对于像这样的问题是非常脆弱的,并且只是停止加载.

可能的方法:

只是在window.onload中概述的促进标签defer上的属性不能在Chrome中正常工作也不是跨浏览器兼容的,因此我只是采用广泛部署和验证的方法来使用已经提到的jQuery跨浏览器解决方案来解决问题,无论如何这是一种好的做法,原则上也应该照顾你的反问题.scriptonload()


更新:

确实存在一些针对WebKit的错误,这些错误可以支持我的结论(无论这种行为是否构成错误或是故意的),请参阅: