Javascript 使用目标属性将文件上载到本地iframe在最新版本中不起作用
我正在使用kcFinder 2.54通过CKEditor上传我的一个站点中的文件。我知道这些脚本的版本都很旧,但直到最近它们还可以正常工作 在浏览Chrome的变更日志时,我注意到以下几点:Javascript 使用目标属性将文件上载到本地iframe在最新版本中不起作用,javascript,html,iframe,kcfinder,Javascript,Html,Iframe,Kcfinder,我正在使用kcFinder 2.54通过CKEditor上传我的一个站点中的文件。我知道这些脚本的版本都很旧,但直到最近它们还可以正常工作 在浏览Chrome的变更日志时,我注意到以下几点: 本机文件系统API使用添加的功能启动新的origin试用版 我想这可能是我的问题的原因,但也许不是。代码如下: 初始化kcFinder时,它会创建一个简单的表单: 请注意target=“uploadResponse”,它是在文档的正文前面加上的本地iframe: 这就是上载文件(This.form)
本机文件系统API使用添加的功能启动新的origin试用版
我想这可能是我的问题的原因,但也许不是。代码如下:
初始化kcFinder时,它会创建一个简单的表单:
请注意target=“uploadResponse”
,它是在文档的正文
前面加上的本地iframe:
这就是上载文件(This.form)函数的外观:
\uuU4.uploadFile=函数(表单){
如果(!\可写){
_.alert(u.label(“无法写入上载文件夹”);
$('#upload').detach();
_.initUploadButton();
返回;
}
form.elements[1].value=\ux.dir;
$('').prependTo(document.body);
$(“#加载”).html(35;.label(“上载文件…”).show();
表单提交();
$('#uploadResponse').load(函数(){
var response=$(this.contents().find('body').text();
$(“#加载”).hide();
response=response.split(“\n”);
所选变量=[],错误=[];
$。每个(响应、函数(i、行){
如果(第行substr(0,1)==“/”)
selected[selected.length]=行.substr(1,行.length-1);
其他的
错误[errors.length]=行;
});
if(errors.length){
errors=errors.join(“\n”);
if(errors.replace(/^\s+/g,”).replace(/\s+/$/g,”).length)
_.警报(错误);
}
如果(!selected.length)
选中=空;
_。刷新(选定);
$('#upload').detach();
setTimeout(函数(){
$('#uploadResponse').detach();
}, 1);
_.initUploadButton();
});
};
我试过调试它,意识到响应
完全是空的。然后我意识到我并不惊讶,因为请求被取消了:
我唯一注意到的是这个标题升级不安全请求:1
,但不确定这是否重要,因为iframe是完全本地的
我一直在搜索有关target
属性可能降级的信息,或者使用iframe发送表单的方式,但没有结果。如果有人经历过类似的事情,或者至少可以告诉我它不起作用的原因,也许我可以想出一个解决办法
到目前为止我已经尝试过的事情:
javascript:
tojavasript:false
javascript:代码>到iframe源中的#
我遇到了同样的问题。我通过调用
表单解决了这个问题。在下一个勾选中提交:
// [...]
$('<iframe id="uploadResponse" name="uploadResponse" src="javascript:;"></iframe>').prependTo(document.body);
$('#loading').html(_.label("Uploading file...")).show();
setTimeout(function() {
$('#uploadResponse').load(function() {
// [...]
});
form.submit();
}, 1);
/[…]
$('').prependTo(document.body);
$(“#加载”).html(35;.label(“上载文件…”).show();
setTimeout(函数(){
$('#uploadResponse').load(函数(){
// [...]
});
表单提交();
}, 1);
我也遇到了这个问题。经过一段时间的研究,可以通过在文件kcfinder/js/060.toolbar.js
中将src=“javascript:;”
替换为src=“about:blank”
轻松解决这个问题:
$('<iframe id="uploadResponse" name="uploadResponse" src="javascript:;"></iframe>').prependTo(document.body);
$('').prependTo(document.body);
到
$('').prependTo(document.body);
参考:
我仍然不知道Chrome到底发生了什么,但您的解决方案可以在更新版本的kcfinder上运行(我有2.54)。更新了kcfinder并应用了您的解决方案,它成功了。你不知道你救了我多少头痛。谢谢你,朋友!
$('<iframe id="uploadResponse" name="uploadResponse" src="about:blank"></iframe>').prependTo(document.body);