1

我正在尝试从一个目录中获取和解析所有 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() 方法,或者给我一些替代解决方案。

谢谢并恭祝安康,

讽刺

4

3 回答 3

1

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

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

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

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

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

于 2014-01-26T17:45:09.147 回答
1

应用程序根目录的位置会因目标平台而异,也可能因模拟器和调试容器而异(例如,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() ;

不太确定这是否是您正在寻找的...

于 2014-01-27T22:00:19.893 回答
0

您将需要在 Intel 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);
于 2014-05-30T23:05:20.693 回答