强制 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:config
将network.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 刷新配置的主要内容,如果未能解决你的问题,请参考以下文章
CKEditor插件在删除后缓存在磁盘中。如何强制浏览器重新扫描或删除该缓存?