Cordova Android 更新破坏了 XMLHttpRequest 下载
Cordova Android Update Broke XMLHttpRequest Downloads
我正在使用 Cordova Android。
我更新了我的 Android SDK 并移除然后添加了我的 android 平台。
cordova platform rm android
cordova platform add android
现在我的 XMLHttpRequest 下载脚本不再有效...我不需要脚本方面的帮助,因为我知道它可以正常工作,因为我在更新之前直接使用它。还检查了我的服务器日志,没有错误。也可以通过浏览器直接访问服务器来访问文件。
var dlUrl = "http://myserver.com/" + fileName;
var fileSystem = cordova.file.externalApplicationStorageDirectory;
window.resolveLocalFileSystemURL(fileSystem, function (dir) {
dir.getFile(fileName, {create: true}, function (file) {
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", transferCompleteDb);
oReq.responseType = "blob";
oReq.open("GET", dlUrl, true);
oReq.onload = function (oEvent) {
var blob = oReq.response;
if (oReq.status == '523' || oReq.status == '404') {
//...
} else {
if (blob) {
var writeToFile = saveFile(file, blob);
} else {
//...
} } };
oReq.onloadend = function () {
//...
};
oReq.onerror = function (e) {
alert('xml error. status [' + e.target.status + '] [' + oReq.status );
//***
//*** This is where it fails. The error code is just 0, no other info
// The request isn't even getting a chance to get a response
// Cordova is blocking it in some setting
};
oReq.send(null);
//...
Cordova 正在通过我缺少的某些设置阻止下载...
我应该在 Android 平台中手动更改新版本的任何设置吗?
我的索引头,更新前没有变化
<meta http-equiv="Content-Security-Policy"
content="default-src 'self' myserver.com http://myserver.com data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
我也试过只对所有值使用 * 来打开它,但没有做任何改变
据我了解,应用程序内部现在会提示权限,如果下载需要权限,我应该会得到某种提示。在尝试不再运行的新版本之前,我已经多次完全卸载并擦除旧应用程序的存储空间。
我的其他脚本能够在我存储下载的区域中创建文件夹和文件。所以只是不能调用的XMLHttpRequest代码。
有什么建议吗?花了几天时间和这个作斗争...
谢谢。
问题已解决...
Cordova 更新对其进行了更改,因此 XMLHttpRequest 只能处理 https 链接。所以我所有使用 http 的链接都停止工作,当然也没有抛出任何错误,因为这是使用 Cordova 的乐趣。在这个上浪费了整整一个星期。希望这可以帮助遇到同样问题的人。
此外,您的服务器实际上不必提供 https...如果您只需将 https 添加到您的 http 链接,Cordova 会很高兴,它会正常工作。
我正在使用 Cordova Android。
我更新了我的 Android SDK 并移除然后添加了我的 android 平台。
cordova platform rm android
cordova platform add android
现在我的 XMLHttpRequest 下载脚本不再有效...我不需要脚本方面的帮助,因为我知道它可以正常工作,因为我在更新之前直接使用它。还检查了我的服务器日志,没有错误。也可以通过浏览器直接访问服务器来访问文件。
var dlUrl = "http://myserver.com/" + fileName;
var fileSystem = cordova.file.externalApplicationStorageDirectory;
window.resolveLocalFileSystemURL(fileSystem, function (dir) {
dir.getFile(fileName, {create: true}, function (file) {
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", transferCompleteDb);
oReq.responseType = "blob";
oReq.open("GET", dlUrl, true);
oReq.onload = function (oEvent) {
var blob = oReq.response;
if (oReq.status == '523' || oReq.status == '404') {
//...
} else {
if (blob) {
var writeToFile = saveFile(file, blob);
} else {
//...
} } };
oReq.onloadend = function () {
//...
};
oReq.onerror = function (e) {
alert('xml error. status [' + e.target.status + '] [' + oReq.status );
//***
//*** This is where it fails. The error code is just 0, no other info
// The request isn't even getting a chance to get a response
// Cordova is blocking it in some setting
};
oReq.send(null);
//...
Cordova 正在通过我缺少的某些设置阻止下载...
我应该在 Android 平台中手动更改新版本的任何设置吗?
我的索引头,更新前没有变化
<meta http-equiv="Content-Security-Policy"
content="default-src 'self' myserver.com http://myserver.com data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
我也试过只对所有值使用 * 来打开它,但没有做任何改变
据我了解,应用程序内部现在会提示权限,如果下载需要权限,我应该会得到某种提示。在尝试不再运行的新版本之前,我已经多次完全卸载并擦除旧应用程序的存储空间。
我的其他脚本能够在我存储下载的区域中创建文件夹和文件。所以只是不能调用的XMLHttpRequest代码。
有什么建议吗?花了几天时间和这个作斗争...
谢谢。
问题已解决...
Cordova 更新对其进行了更改,因此 XMLHttpRequest 只能处理 https 链接。所以我所有使用 http 的链接都停止工作,当然也没有抛出任何错误,因为这是使用 Cordova 的乐趣。在这个上浪费了整整一个星期。希望这可以帮助遇到同样问题的人。
此外,您的服务器实际上不必提供 https...如果您只需将 https 添加到您的 http 链接,Cordova 会很高兴,它会正常工作。