javascript - 当我动态设置内容时,TinyMCE 无法与 Chrome 一起使用

标签 javascript google-chrome dom-events tinymce

我有一个网站:

<body  onload="ajaxLoad()" > 

我有一个 Javascript 函数,然后使用文本区域的 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&#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);
    }

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

有什么建议吗?

最佳答案

背景:

由于各种原因,onload() 不被认为是加载 Javascript 的正确方法,参见示例 Launching Code on Document Ready ,最重要/最引人注目的是 Javascript 代码在页面完全下载完成之前不会运行,包括图像等,因此这可能需要很长时间(例如,如果外部横幅广告服务器关闭等)。

相反,建议在 DOM 时尽快加载 Javascript已准备就绪,但不幸的是,没有跨浏览器兼容的 native 解决方案,请参阅 Getting notified when the page DOM has loaded (but before window.onload) ;请注意,我的整个答案都是基于最优秀的 Javascript 库 jQuery ,它提供了一个 cross browser solution for this problem ,因此我肯定会赞成两个投票较高的答案,而不是我自己接受的解决方案。

可能的原因:

您的问题似乎是由相反的行为引起的:Chrome促进 WebKit渲染引擎,就像Safari ,并且对于后者 onload() 的行为有所不同,请参阅 Is Safari faster? 中的 When does onload fire? 部分.可以在 window.onload not working correctly in Chrome 中找到此问题的另一个特定于 Chrome 的描述。 ,虽然没有解释。

总而言之,我怀疑 onload() 在 DOM 实际完全加载之前触发,至少考虑到 TinyMCE 的要求,TinyMCE 在此类问题上是出了名的脆弱,并且只是停止加载。

可能的解决方案:

只是便利属性deferscript 上标记如 window.onload not working correctly in Chrome 中所述再次不跨浏览器兼容,因此我将简单地使用已经提到的 jQuery cross browser solution for the onload() problem 的广泛部署和验证的方法。 ,这无论如何都是很好的做法,原则上也应该处理你的逆问题。


更新:

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

关于javascript - 当我动态设置内容时,TinyMCE 无法与 Chrome 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1318291/

相关文章:

javascript - 在 JavaScript 中对数组使用 Math.max.apply 时遇到问题

macos - 开发者工具在 Chrome osx 中不起作用

javascript - 如何使用chrome扩展名控制youtube视频?

javascript - Dojo FilteringSelect 仅触发一次 OnChange 事件

javascript - 导入的变量未翻译

javascript - 使用 JavaScript 变量数组

javascript - 为什么 $(document).append() 在 jQuery 1.9.1 中不起作用?

android - 如何在 Android Studio 中更改文本的字体?

javascript - dojo 相当于事件 .change()

javascript - onclick 选择选项标签奇怪地触发事件而不点击选项