intel XDK目录浏览

时间:2014-01-23 23:16:43

标签: node.js mobile intel-xdk

我正在尝试从英特尔Xdk项目中的目录中获取和解析所有JSON文件。我案例中的所有文件都存储在项目的“/ 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()方法,或者给我一些替代解决方案。

谢谢和问候,

讽刺

3 个答案:

答案 0 :(得分:1)

您无法在移动应用上使用nodejs api。这是XDK模拟器允许您执行此操作的错误。该错误已在下一版XDK中修复。

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

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

然后使用脚本标记加载它:

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

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

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

答案 2 :(得分:0)

您需要在英特尔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);