我使用adobeair for iPad/iPhone应用程序。
我也使用StageWebViewBridge
(https://github.com/paleozogt/StageWebViewBridge)作为主要的web内容显示容器。
我的应用程序在桌面版上运行良好,但是StageWebViewBridge
的StageWebViewDisk
破坏了HTML文件上传功能:
<input id="user_avatar" name="user[avatar]" style="width:100%" type="file" />
。,无论何时从真正的iPad设备中浏览并从Take Photo or Video
或Choose Existing
中选择文件,上述user_avatar
输入根本不会更新。
我相信有些路径被StageWebViewDisk.initialize(stage)
弄乱了。
你可以在这里找到StageWebViewDisk
的完整源代码:https://github.com/paleozogt/StageWebViewBridge/blob/master/StageWebViewBridge/src/es/xperiments/media/StageWebViewDisk.as
下面的代码片段非常可疑:
case isIPHONE :
/* new iOS 5.0 Data Storage Guidelines
* https://developer.apple.com/icloud/documentation/data-storage/
* https://developer.apple.com/library/ios/#qa/qa1719/_index.html
*/
_appCacheFile = new File(File.applicationDirectory.nativePath +"/../Library/Caches");
_applicationCacheDirectory = new File( _appCacheFile.nativePath ).url;
_applicationRootPath = _applicationCacheDirectory + '/' + getWorkingDir();
_applicationSourcesDirectory = new File( new File( "app:/" + _document_root ).nativePath ).url;
_appDocsDirectory = File.documentsDirectory.url;
/* new iOS 5.0 Data Storage Guidelines
* https://developer.apple.com/icloud/documentation/data-storage/
* https://developer.apple.com/library/ios/#qa/qa1719/_index.html
*/
_applicationTempDir = new File(File.applicationDirectory.nativePath +"/../tmp");
// To acomplish the Apple Data Storage Guidelines Rules delete our TMP files dir at exit
NativeApplication.nativeApplication.addEventListener(Event.EXITING, deleteTempFolder,false,0,true );
NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, deleteTempFolder, false, 0, true);
break;
我调试了很多,我终于发现StageWebViewDisk.initialize(stage)
是导致问题的原因。
证明是,当我不使用StageWebViewDisk.initialize(stage)
,而是直接将stage
分配给StageWebViewBridge._view.stage
时,它工作得很好。
我不熟悉iOS app/cache目录。
请告诉我。
我终于想通了:
_applicationTempDir = new File(File.applicationDirectory.nativePath +"/../SWVBTmp");
// It seems "tmp" is being used by the iOS system (such as the html file upload), so we changed to "SWVBTmp";