2013-02-13 104 views
1

我正在为使用Flash Builder,Flex 4.6和AIR 3.5构建IOS的移动应用程序。我正在调查使用StageWebView呈现一些HTML5内容。StageWebView,iOS,本地文件

我想要做的是将内容构建到应用程序中,而不是将其放到服务器上。它相对静止。但是我阅读(并确认)应用内文件不能直接由StageWebView使用。但是,下面的建议,我有应用中的内容复制到一个临时文件夹,然后创建一个文件://网址的StageWebView,这似乎工作:

// create the view 
var webView:StageWebView = new StageWebView(); 
webView.stage = this.stage; 
webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); 

// copy the HTML5 content to a temp directory 
var src:File = File.applicationDirectory.resolvePath("myFolder"); 
var temp:File = File.createTempDirectory().resolvePath("myFolder"); 
copyFolderContentsToAnotherFolder(src,temp); 

// what's the URL 
var newPath:String = "file://" + temp.nativePath + "/index.html"; 

// load it 
webView.loadURL(newPath); 

这是一个坏主意?临时文件是否会堆积在我的设备中,无法删除它们?

我也想过让应用程序通过侦听端口并为请求的文件提供数据来实现最小的HTTP服务器。这将允许我们将文件从它们的应用内位置提供给StageWebView,而不需要复制。我们在桌面空气应用程序中执行此操作,效果非常好。但是,这种方法使用ServerSocket,我发现它并不支持移动设备。有没有其他方法可以做到这一点?

最后,StageWebView在Flash Builder iOS模拟器中无法正常工作,使调试变得困难。是否最好去FB 4.7,哪个(应该)允许我在XCode的iOS模拟器中使用它?

感谢

回答

3

嗯,看来我可以直接解决在应用程序的内容,我只是要构建一个file://网址吧:

var src:File = File.applicationDirectory.resolvePath("myFolder/index.html"); 
var newPath:String = "file://" + src.nativePath; 
webView.loadURL(newPath); 
+0

你是如何用这个做出的决定的?我在试图在用户设备上使用本地HTML和jQuery时遇到了这个问题,到目前为止我的工作很好,但是您是否遇到过临时目录的问题(“这是一个坏主意吗?临时文件是否会堆积在我的设备中无法删除它们?“)?或根据需要自动清除临时文件夹中的Android干净项目? – tamak 2013-09-08 18:40:12

0

它已经太长时间,因为我想过这个。但据我记得,我可以在应用程序内容中使用,而无需制作副本,适用于iOS。但是我今天正在阅读的内容在Android上可能无法实现。

+0

Fred,如果你想编辑你的答案,请登录你的其他帐户或编辑这一个... – OGHaza 2014-01-22 17:36:27

+0

如果你需要它,你的编辑是:“@davidkomer - 我没有使用应用内HTTP服务器来提供MP4而是我正在使用(不管是否相信)JWPlayer和MP4文件位于服务器某处。强调文本如果我必须猜测MP4,可能是因为您的应用内HTTP服务器没有正确处理逐行扫描下载,我知道我的不是。“ – OGHaza 2014-01-22 17:37:42

0

StageWebView似乎与iOS一起使用时,对于远程文件效果最佳。所以,我使用一些Actionscript代码来实现一个简单的HTTP服务器,提供本地文件。然后,我给StageWebView http使用本地主机和端口号。作品膨胀。

+0

嘿弗雷德 - 我能做到这一点,但对于视频(MP4),它失败了......任何想法为什么? – davidkomer 2014-01-22 13:29:41

-1

为寻找当前解决这个问题,这比写一个HTTP服务器更简单,this是什么,我(仅在iOS)工作:

webView.loadURL(new File(new File("app:/myFolder/index.html").nativePath).url); 

但是有一个警告,这是看起来你不能在URL的末尾传递查询字符串或散列。一旦加载主内容,就可以通过加载javascript: URL将数据传递给HTML内容。

有一个包含iOS和Android的更广泛信息的页面here

+0

您的解决方案无法在android上运行(但适用于桌面AIR)。它会抛出ArgumentError异常2004 – 2015-11-19 15:35:55

+0

@DeyanVitanov我意识到这一点,这就是为什么我在上面添加“仅在iOS上”的警告。仅仅因为它不是一个通用的解决方案并不意味着它对某个人没用。 – 2015-11-20 16:15:41

+0

你说得对。我的错。谢谢 – 2015-11-20 19:38:29

0

Adob​​e更新了SDK之后 - @ Jesse Crosen方法不适用于android,但仅适用于iOS。 要使它在Android上工作,你必须像这样复制打包文件:

var htmlFile:File = File.applicationDirectory.resolvePath("html/index.html"); 
var fileDest:File = File.applicationStorageDirectory.resolvePath("html/index.html"); 
htmlFile.copyTo(fileDest, true); 
webView.loadURL("file://" + htmlFile.nativePath);