StageWebView,iOS,本地文件

时间:2013-02-13 00:49:53

标签: ios flex mobile air

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

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

//  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);

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

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

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

感谢

5 个答案:

答案 0 :(得分:3)

好吧,似乎我可以直接解决应用内内容,我只需为它构建一个file:// URL:

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

答案 1 :(得分:0)

我想到这个已经太久了。但是我记得我能够在iOS中使用app内容而无需复制。但我今天正在阅读这在Android上可能无法实现的目标。

答案 2 :(得分:0)

似乎StageWebView与iOS一起使用时,最适合远程文件。所以,我正在使用一些实现简单HTTP服务器的Actionscript代码,提供本地文件。然后,我给StageWebView http urls使用localhost和一个端口号。工作膨胀。

答案 3 :(得分: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);

答案 4 :(得分:-1)

对于那些寻找当前解决此问题的解决方案比编写HTTP服务器更简单的人来说,this对我有用(仅限iOS):

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

但有一点需要注意,就是你似乎无法在URL末尾传递查询字符串或哈希值。一旦加载了主要内容,就可以通过加载javascript: URL将数据传递给HTML内容。

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