强制 CKEDITOR 刷新配置

Posted

技术标签:

【中文标题】强制 CKEDITOR 刷新配置【英文标题】:Force CKEDITOR to refresh config 【发布时间】:2013-02-03 03:05:13 【问题描述】:

我创建了一个使用 CKEDITOR 的 cms 应用程序,当我向 CKEDITOR 添加一些功能时,我需要刷新一些 CKEDITOR .js /.css 文件。

但是 CKEDITOR 强制浏览器缓存它们。

我看到它对所有 .js/.css 文件使用查询字符串

这个查询字符串反映了我认为的 CKEDITOR 版本:

/Js/ckeditor/config.js?t=CAPD
/Js/ckeditor/lang/it.js?t=CAPD
/Js/ckeditor/plugins/onchange/plugin.js?t=CAPD

CKEDITOR 中是否有嵌入式方法可以做到这一点?

我在文档中找不到任何内容。 我正在使用 CKEDITOR 4

主要问题是,当我上传一些更改时,客户端不会更新它们,并且新功能不可用,或者最坏的情况 CKEDITOR 不起作用。

【问题讨论】:

***.com/questions/58013460/… 【参考方案1】:

您总是可以在您的 url 中添加一个唯一的时间戳作为变量,或者只是进行硬刷新 (CTRL + F5)

【讨论】:

问题不是页面 url,而是 ckeditor 动态加载的 javascript 文件。我不能对每个网站用户说刷新页面 为什么不呢?当您编辑配置以添加功能时,浏览器应检测到配置文件已更改并从服务器加载新的配置文件。或者你想重新加载配置文件,因为用户在运行时向编辑器添加了一些东西? 你知道CKEDITOR是如何加载它的文件的吗? 快速浏览一下 ckeditor.js(或您的页面的 html),发现它会将脚本/css 文件注入到文档的头部 令人难以置信的是有人 +1 你的答案。这与我的问题无关。【参考方案2】:

我找到了一个相当优雅的方法:

设置就够了:

CKEDITOR.timestamp='ABCD';

在您链接 ckeditor.js 之后或在 ckeditor 加载其所有文件之前

这是 CKEDITOR 用来为它动态加载的所有 .js .css 文件添加时间戳的变量。

所以每次我更改这些文件时,我都会更新该变量,浏览器会重新加载它们。

【讨论】:

@Geeo 这是 ckeditor 用来刷新其外部文件的方法。此变量旨在执行此操作。所以是的,这很优雅。 这并没有破坏 IE10 中的缓存。你能发布更多细节吗?比如在哪里/何时执行这个脚本? @ClearCloud8 在您引用 ckeditor.js 时和使用 ckeditor.replace() 或 ckeditor.inline 之前的脚本元素之后 对我来说这不起作用,使用 ckeditor v4.6 我不得不编辑 ckeditor.js 第 5 行,它有 timestamp:"GAGE" 。就我而言,我正在更改模板 js 文件 我把它留空了CKEDITOR.timestamp = "";,现在查询参数?t= 根本不包括在内。因此,您每次都会重新加载配置。【参考方案3】:

时间戳解决方案对我不起作用,所以如果其他人有同样的问题,我将 ?v=date 附加到我包含 ckeditor.js 的位置,然后再次在 ckeditor.js 中添加 config.js 所在的位置参考。

似乎由于 config.js 被缓存,新的时间戳没有被使用。至少在几次刷新之后才可以,但这不是我可以告诉我的用户做的事情。

【讨论】:

您是否在包含 ckeditor.js 脚本标签之后设置了时间戳?如果你在它之后再做可能为时已晚 我在 config.js 中设置。所以我需要在包含 ckeditor 之前设置时间戳? 在 config.js 中为时已晚! ckeditor 已经加载了它的文件!您必须在 <script src="/ckeditor.js"></script> 之后设置它【参考方案4】:

对我来说,设置CKEDITOR.timestamp = +new Date 效果非常好。我在一个 JS 中编写了它,该 JS 将在加载任何其他 CKEditor JS 之前加载 (see my custom Drupal module)。

现在,每次我重新加载浏览器时,附加到自定义插件或自定义配置 JS 的查询都会刷新。我想这可能也适用于自定义 CSS,但我没有对此进行测试。

【讨论】:

这将始终刷新每个 ckeditor .js 。您确定要为每个请求刷新每个 js 吗?它们很多,它确实会减慢您的页面加载速度。 @giammin - 当然你在开发完成后会删除它 这是有道理的:D。无论如何,当我部署新修改时,我需要一种刷新浏览器缓存的方法 @giammin - 就像其他人之前所说的,我也不认为这是浏览器缓存问题。【参考方案5】:

在 Firefox 上:

    转到about:confignetwork.http.use-cache 设置为false

【讨论】:

这是针对本地问题的全局解决方案,很可能根本不适用,因为网站无法控制浏览器设置。【参考方案6】:

我找到了一个更简单的方法,以防有人仍然对此感到沮丧。

如果您在浏览器中打开带有时间戳的配置文件 URL(例如?t=XYZD),硬刷新它,然后返回您的应用程序页面并刷新它,您应该会获得新版本的配置文件。

您需要使用与 ckeditor 在页面源中设置的相同时间戳。如果您使用开发人员工具或 Firebug,在控制台中输入 CKEDITOR.timestamp 将为您提供要使用的值。

【讨论】:

您认为向网站用户解释这一点很简单吗? The main problem is that when I upload some changes they are not updated by the clients and new functionality are not available or worst case CKEDITOR does not work. 我感受到了你的痛苦。我想您可以:1)将指向新配置 URL 的链接发送给他们,并告诉他们如何进行硬刷新或 2)告诉他们如何删除浏览器缓存。 谢谢,这对我有用(在 laravel 中使用背包)【参考方案7】:

这是我为修复它所做的。在你的 /ckeditor/config.js 添加这一行:

CKEDITOR.timestamp = 'something_random'; 

每次有插件更新时更新“something_random”。

在使用它的页面中,确保并加载如下资源:

<script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
<script src="/ckeditor/config.js?v=something_random"></script>

通过这样做,config.js 将被加载两次,因为 CKEditor 会自行加载它,但它仍然可以正常工作,这应该为您提供在所有浏览器上自动刷新所需的控制。我是一名 .NET 开发人员,实际上将 /ckeditor/config.js 放在了我的捆绑器中,因此它会自动获取查询字符串上的版本,但如果您不使用花哨的捆绑器,只需手动执行我上面所说的操作?v=something_random。

【讨论】:

【参考方案8】:

将以下代码添加到ckeditor.js

/*Lets Create a random number*/

 function randomString(length, chars) 
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;

var rString = randomString(4, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

然后替换 ckeditor.js 中的值 timestamp:rString

【讨论】:

开发后可以去掉randomNumber代码。 嗯,是的,我确实阅读了它们,我的建议有问题吗?如果我错了,请纠正我。【参考方案9】:

这个技巧在 Firefox 中不仅适用于 CKEditor,而且适用于您想要切换本地缓存的任何页面。

    打开 Firefox 调试控制台 (F12)。 打开控制台设置 (F1)。 启用“禁用 HTTP 缓存(工具箱打开时)”。 保持控制台打开:)

经过非常简短的检查,我在 Chrome 和 IE 中都找不到类似的设置。

HTH

【讨论】:

【参考方案10】:

最有效的方法是将带有改进的配置和 css 文件的 CKEDITOR 放到新的子目录中:

src="/ckeditor_new_one/ckeditor.js"

【讨论】:

【参考方案11】:

由于这个帖子很受欢迎,让我分享一下我的经验-

我尝试了@giammin 的回答,但没有奏效。我最终将 config.js 的权限更改为 664,然后它就像一个魅力。

【讨论】:

以上是关于强制 CKEDITOR 刷新配置的主要内容,如果未能解决你的问题,请参考以下文章

php 强制ckeditor清理粘贴的txt

CKEditor插件在删除后缓存在磁盘中。如何强制浏览器重新扫描或删除该缓存?

ckeditor 敏感词标记显示处理方法

ckeditor中 config.js等通过ckeditor.js引入文件手动修改方法

CKEditor即时编辑配置

CKeditor 配置使用