Fine Uploader - 未从加载的 iframe 收到有效消息,仅限 IE9
Fine Uploader - No valid message received from loaded iframe, IE9 only
在尝试使用 IE9 和 FineUploader 4.2.2 上传时遇到现有实现的 "No valid message received from loaded iframe" 错误,similar issues with IE8 与我的代码没有正确设置 uuid 相关,已成功解决。
这些修复仍然存在; IE8 有效,您可以跟踪从 post 到响应(如下所示)的 UUID,FineUploader 仍然适用于 IE8、IE11、Chrome 和 Firefox。没有 IE10 参考点。
可以在 IE9 v9.0.8112.16421 上复制该问题(来自 Modern.ie 的库存 Win7 IE9 VM)
手动选择文件后,F12 开发人员工具捕获了两个请求 - 图像被发布到我的处理程序,returns 成功响应后跟 "iframe.xss.response.js" 的 GET,这成功了。
打开调试设置,以防它提供更多信息,下面包含经过清理的结果 - 去除了一些内部变量,但未经编辑,headers 是从 F12 开发人员工具粘贴的,所以看起来有点奇怪.
想象一下,我只是遗漏了一些简单的东西,但总是有很小的机会它是在以后的版本中修复的已知问题。
更新 02/10
针对 FineUploader v5.3.2 进行了测试,仍然遇到 "registerPostMessageCallback" 记录的相同错误(第 5001 行,fine-uploader.js),在 "corsMessageReceiver.receiveMessage" 中放置了一个断点未达到。
向 "iframe.xss.response.js" 添加了一些警报并且 if (match) {...} 的测试失败了,但是 document.body.innerHTML 肯定有内容。
请求
Request POST /Upload HTTP/1.1
Accept text/html, application/xhtml+xml, */*
Accept-Language en-GB
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Content-Type multipart/form-data; boundary=---------------------------7df14d340118
Accept-Encoding gzip, deflate
Content-Length 781830
Connection Keep-Alive
Cache-Control no-cache
-----------------------------7df14d340118
Content-Disposition: form-data; name="qquuid"
5489a37c-1cde-4c32-9faa-f9c2532b9ba1
-----------------------------7df14d340118
Content-Disposition: form-data; name="qqfilename"
Koala.jpg
-----------------------------7df14d340118
Content-Disposition: form-data; name="qqfile"; filename="Koala.jpg"
Content-Type: image/jpeg
<Binary File Data Not Shown>
---------------------------7df14d340118--
回应
Response HTTP/1.1 200 OK
Cache-Control private
Content-Type text/html; charset=utf-8
Server Microsoft-IIS/7.5
Access-Control-Allow-Origin *
Access-Control-Allow-Methods GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Headers Content-Type, cache-control, x-requested-with
Access-Control-Allow-Credentials false
Date Fri, 25 Sep 2015 10:16:03 GMT
Content-Length 268
{
"pageList": [],
"name": "Koala.jpg",
"newUuid": "2930",
"size": 762,
"thumbnailUrl": null,
"pageCount": 0,
"success": true,
"uuid": "5489a37c-1cde-4c32-9faa-f9c2532b9ba1"
}<script src="/js/fineuploader-4.2.2/iframe.xss.response.js"></script>
控制台
LOG: [FineUploader 4.2.2] Detected valid file button click event on file 'Koala.jpg', ID: 0.
LOG: [FineUploader 4.2.2] Retrying upload for 'Koala.jpg' (id: 0)...
LOG: [FineUploader 4.2.2] Sending upload request for 0
LOG: [FineUploader 4.2.2] Received iframe load event for CORS upload request (iframe name 0_2523c193-b1ad-4ff4-bf71-59608e848560)
[FineUploader 4.2.2] No valid message received from loaded iframe for iframe name 0_2523c193-b1ad-4ff4-bf71-59608e848560
LOG: [FineUploader 4.2.2] iframe loaded
已解决。问题是由于处理程序的 JSON 响应中的换行符和 "iframe.xss.response.js" 使用不期望换行符的正则表达式。
这里有两个可能的解决方案;
避免在处理程序的 JSON 响应中包含换行符;如果换行符不存在,则正则表达式不会失败。
修改正则表达式,使模式可以匹配换行符。
在 iframe.xss.response.js 中搜索以下行;
var match = /(\{.*\})/.exec(document.body.innerHTML);
如果您不熟悉正则表达式,这将匹配大括号内的零个或多个字符块,但 "characters" 不包含换行符,因此如果您的 JSON 包含它们return 匹配失败。
更新行如下所示正确运行捕获。
var match = /(\{(.|\r|\n)*\})/.exec(document.body.innerHTML);
此模式将匹配大括号内零个或多个字符 + 换行符(cr 和 lf)的块 - 使用 IE8 和 IE9 测试没有任何明显问题。
在尝试使用 IE9 和 FineUploader 4.2.2 上传时遇到现有实现的 "No valid message received from loaded iframe" 错误,similar issues with IE8 与我的代码没有正确设置 uuid 相关,已成功解决。
这些修复仍然存在; IE8 有效,您可以跟踪从 post 到响应(如下所示)的 UUID,FineUploader 仍然适用于 IE8、IE11、Chrome 和 Firefox。没有 IE10 参考点。
可以在 IE9 v9.0.8112.16421 上复制该问题(来自 Modern.ie 的库存 Win7 IE9 VM)
手动选择文件后,F12 开发人员工具捕获了两个请求 - 图像被发布到我的处理程序,returns 成功响应后跟 "iframe.xss.response.js" 的 GET,这成功了。
打开调试设置,以防它提供更多信息,下面包含经过清理的结果 - 去除了一些内部变量,但未经编辑,headers 是从 F12 开发人员工具粘贴的,所以看起来有点奇怪.
想象一下,我只是遗漏了一些简单的东西,但总是有很小的机会它是在以后的版本中修复的已知问题。
更新 02/10
针对 FineUploader v5.3.2 进行了测试,仍然遇到 "registerPostMessageCallback" 记录的相同错误(第 5001 行,fine-uploader.js),在 "corsMessageReceiver.receiveMessage" 中放置了一个断点未达到。
向 "iframe.xss.response.js" 添加了一些警报并且 if (match) {...} 的测试失败了,但是 document.body.innerHTML 肯定有内容。
请求
Request POST /Upload HTTP/1.1
Accept text/html, application/xhtml+xml, */*
Accept-Language en-GB
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Content-Type multipart/form-data; boundary=---------------------------7df14d340118
Accept-Encoding gzip, deflate
Content-Length 781830
Connection Keep-Alive
Cache-Control no-cache
-----------------------------7df14d340118
Content-Disposition: form-data; name="qquuid"
5489a37c-1cde-4c32-9faa-f9c2532b9ba1
-----------------------------7df14d340118
Content-Disposition: form-data; name="qqfilename"
Koala.jpg
-----------------------------7df14d340118
Content-Disposition: form-data; name="qqfile"; filename="Koala.jpg"
Content-Type: image/jpeg
<Binary File Data Not Shown>
---------------------------7df14d340118--
回应
Response HTTP/1.1 200 OK
Cache-Control private
Content-Type text/html; charset=utf-8
Server Microsoft-IIS/7.5
Access-Control-Allow-Origin *
Access-Control-Allow-Methods GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Headers Content-Type, cache-control, x-requested-with
Access-Control-Allow-Credentials false
Date Fri, 25 Sep 2015 10:16:03 GMT
Content-Length 268
{
"pageList": [],
"name": "Koala.jpg",
"newUuid": "2930",
"size": 762,
"thumbnailUrl": null,
"pageCount": 0,
"success": true,
"uuid": "5489a37c-1cde-4c32-9faa-f9c2532b9ba1"
}<script src="/js/fineuploader-4.2.2/iframe.xss.response.js"></script>
控制台
LOG: [FineUploader 4.2.2] Detected valid file button click event on file 'Koala.jpg', ID: 0.
LOG: [FineUploader 4.2.2] Retrying upload for 'Koala.jpg' (id: 0)...
LOG: [FineUploader 4.2.2] Sending upload request for 0
LOG: [FineUploader 4.2.2] Received iframe load event for CORS upload request (iframe name 0_2523c193-b1ad-4ff4-bf71-59608e848560)
[FineUploader 4.2.2] No valid message received from loaded iframe for iframe name 0_2523c193-b1ad-4ff4-bf71-59608e848560
LOG: [FineUploader 4.2.2] iframe loaded
已解决。问题是由于处理程序的 JSON 响应中的换行符和 "iframe.xss.response.js" 使用不期望换行符的正则表达式。
这里有两个可能的解决方案;
避免在处理程序的 JSON 响应中包含换行符;如果换行符不存在,则正则表达式不会失败。
修改正则表达式,使模式可以匹配换行符。
在 iframe.xss.response.js 中搜索以下行;
var match = /(\{.*\})/.exec(document.body.innerHTML);
如果您不熟悉正则表达式,这将匹配大括号内的零个或多个字符块,但 "characters" 不包含换行符,因此如果您的 JSON 包含它们return 匹配失败。
更新行如下所示正确运行捕获。
var match = /(\{(.|\r|\n)*\})/.exec(document.body.innerHTML);
此模式将匹配大括号内零个或多个字符 + 换行符(cr 和 lf)的块 - 使用 IE8 和 IE9 测试没有任何明显问题。