【问题标题】:StageWebView, iOS, local filesStageWebView、iOS、本地文件
【发布时间】:2013-02-13 00:49:53
【问题描述】:

我正在使用 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);

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

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

最后,StageWebView 在 Flash Builder iOS 模拟器中无法正常工作,导致调试困难。是不是最好去获取 FB 4.7,它(应该)允许我将它与 XCode 的 iOS 模拟器一起使用?

谢谢

【问题讨论】:

    标签: ios apache-flex mobile air


    【解决方案1】:

    好吧,看来我可以直接寻址应用内内容,我只需要为它构造一个 file:// URL:

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

    【讨论】:

    • 你是怎么弄明白这个的?我在尝试在用户设备上尝试使用本地 HTML 和 jquery 时遇到了它,到目前为止我运行良好,但是您是否遇到过临时目录的问题(“这是一个坏主意吗?临时文件会堆积在我的设备中无法删除它们?”)?还是android会根据需要自动从临时文件夹中清除项目?
    【解决方案2】:

    我已经很久没有想到这个了。但我记得我可以在不复制 iOS 的情况下在应用程序内容中使用。但我今天正在阅读,这在 Android 上可能是不可能的。

    【讨论】:

    • Fred,如果您想编辑答案,请登录您的其他帐户或编辑此帐户...
    • 如果您需要,您的编辑是:“@davidkomer - 我没有使用应用内 HTTP 服务器来传送 MP4 文件。相反,我使用的是(信不信由你)JWPlayer 和 MP4文件在某处的服务器上。强调文本如果我不得不猜测 MP4,可能是您的应用内 HTTP 服务器没有正确处理渐进式下载。我知道我的不是。"
    【解决方案3】:

    似乎 StageWebView 在与 iOS 一起使用时最适合远程文件。因此,我正在使用一些 Actionscript 代码来实现一个简单的 HTTP 服务器,提供本地文件。然后,我给 StageWebView 使用 localhost 的 http url 和一个端口号。效果很好。

    【讨论】:

    • 嘿 Fred - 我能够做到这一点,但对于视频 (mp4) 它失败了......知道为什么吗?
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      对于正在寻找比编写 HTTP 服务器更简单的该问题的当前解决方案的任何人,this 对我有用(仅在 iOS 上):

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

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

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

      【讨论】:

      • 您的解决方案不适用于 android(但适用于 Desktop AIR)。它抛出 ArgumentError 异常 2004
      • @DeyanVitanov 我知道这一点,这就是为什么我在上面添加了“仅在 iOS 上”的警告。仅仅因为它不是一个通用的解决方案并不意味着它对某人没有用。
      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多