34

我创建了一个使用 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 不起作用。

4

11 回答 11

66

我找到了一种非常优雅的方式:

设置就足够了:

CKEDITOR.timestamp='ABCD';

就在您链接 ckeditor.js 之后,或者无论如何在 ckeditor 加载其所有文件之前

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

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

于 2013-02-18T17:40:38.707 回答
3

对我来说,设置CKEDITOR.timestamp = +new Date非常好。我在一个 JS 中编写了它,它将在加载任何其他 CKEditor JS 之前加载(请参阅我的自定义 Drupal 模块)。

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

于 2015-04-01T15:24:47.293 回答
3

这是我为修复它所做的。在你的 /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。

于 2016-11-29T12:24:26.463 回答
2

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

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

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

于 2016-10-19T10:53:53.300 回答
0

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

于 2013-02-18T16:11:33.913 回答
0

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

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

于 2014-09-16T01:33:37.653 回答
0

将以下代码添加到 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');

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

于 2017-04-20T09:59:14.973 回答
0

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

src="/ckeditor_new_one/ckeditor.js"

于 2019-10-12T21:54:40.220 回答
0

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

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

于 2021-04-20T14:44:56.023 回答
-1

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

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

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

高温高压

于 2019-09-12T15:34:10.497 回答
-3

在火狐上:

  1. about:config
  2. 设置network.http.use-cachefalse
于 2016-05-10T09:48:21.487 回答