【问题标题】:intel XDK directory browsingintel XDK 目录浏览
【发布时间】:2016-05-12 05:05:05
【问题描述】:

我试图找到一种方法来访问和解析目录中的所有 JSON 文件,女巫在英特尔 Xdk 项目中。我的案例中的所有文件都存储在项目的“/cards”文件夹中。 我尝试使用 fs.readdirSync('/cards') 方法来达到主题,但这并没有指向我所期望的位置,而且我对'intel.xdk.webRoot'路径没有运气。

通过模拟器,我设法通过一个技巧获取文件:

fs.readdirSync(intel.xdk.webRoot.replace('localhost:53862/http-services/emulator-webserver/ripple/userapp/', '')+'cards');

(intel.xdk.webRoot 包含我的“/cards”文件夹的绝对路径)

它的工作就像一个魅力,但它不能在任何我想要构建的真实设备上工作。 我已经在 iOS7 和 Android 4.2 的手机上试过了。

请帮助我更好地使用 fs.readdirSync() 方法,或者给我一些替代解决方案。

感谢和问候,

讽刺

【问题讨论】:

    标签: node.js mobile intel-xdk


    【解决方案1】:

    您不能在移动应用上使用 nodejs api。 XDK 仿真器允许您执行此操作是一个错误。该错误已在 XDK 的下一版本中修复。

    你可以编写一个节点程序来扫描目录,然后用目录的内容写出一个 js 文件。在将应用程序打包到构建选项卡中之前,您将在笔记本电脑上运行节点脚本。输出将如下所示: 文件.js:

    dir = {files: ['file1.txt', 'file2.txt']}

    然后使用脚本标签来加载它:

    而且你的 js 可以读取 dir 变量。这假设应用程序运行时内容不会改变。

    【讨论】:

      【解决方案2】:

      应用程序根目录的位置会因目标平台而异,也可能因模拟器和调试容器而异(例如,App Preview 与 App Analyzer)。以下是我在项目中查找文件所做的工作:

      // getWebPath() returns the location of index.html
      // getWebRoot() returns URI pointing to index.html
      
      function getWebPath() {
          "use strict" ;
          var path = window.location.pathname ;
          path = path.substring( 0, path.lastIndexOf('/') ) ;
          return 'file://' + path ;
      }
      
      function getWebRoot() {
          "use strict" ;
          var path = window.location.href ;
          path = path.substring( 0, path.lastIndexOf('/') ) ;
          return path ;
      }
      

      我无法对此进行详尽的测试,但到目前为止它似乎工作正常。这是一个示例,我正在使用 Cordova 媒体对象并希望它播放本地存储在项目中的文件。请注意,我必须对 iOS 容器进行“特殊处理”:

      var x = window.device && window.device.platform ;
      console.log("platform = ", x) ;
      
      if(x.match(/(ios)|(iphone)|(ipod)|(ipad)/ig)) {
          var media = new Media("audio/bark.wav", mediaSuccess, mediaError, mediaStatus) ;
      }
      else {
          var media = new Media(getWebRoot() + "/audio/bark.wav", mediaSuccess, mediaError, mediaStatus) ;
      }
      
      console.log("media.src = ", media.src) ;
      media.play() ;
      

      不太确定这是否是您要找的...

      【讨论】:

      • 谢谢,这帮助我找到了正确的路径。但问题是我不知道文件的名称,我想遍历一个目录并加载所有文件。我发现客户端脚本是不可能的。
      • 为此,您可能需要使用Cordova fileapi。截至本文发布之日,XDK 支持 Cordova 2.9.0 以及 XDK api。
      【解决方案3】:

      您需要在英特尔 XDK 中使用 Cordova 构建,以下是有关使用 Cordova 构建的信息:

      https://software.intel.com/en-us/html5/articles/using-the-cordova-for-android-ios-etc-build-option
      

      还有一个 DirectoryReader 示例:

      function success(entries) {
          var i;
          for (i=0; i<entries.length; i++) {
              console.log(entries[i].name);
          }
      }
      
      function fail(error) {
          alert("Failed to list directory contents: " + error.code);
      }
      
      // Get a directory reader
      var directoryReader = dirEntry.createReader();
      
      // Get a list of all the entries in the directory
      directoryReader.readEntries(success,fail);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多