我正在尝试从英特尔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()方法,或者给我一些替代解决方案。
谢谢和问候,
讽刺
答案 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);