当我调用" window.requestFileSystem"时,错误回调将返回"未找到的类"错误。进入Cordova" requestFileSystem"功能,我注意到#34; Class not found"在exec()调用期间返回(我无法跟踪它)。 有没有人通过这个问题,或知道如何解决它? 我知道它已在多个论坛上列出,但修正案表明那些不适合我。
据我所见,所有的插件都在那里。使用Cordova CLI安装,它们出现在插件文件夹中。我想知道文件插件是否实际加载,不知道我如何验证..
WWW / index.html中
<body onload="onLoad();">
<script type="text/javascript">
// Init when we're good and ready.
function onLoad(){document.addEventListener('deviceready', init, true);}
// Init :)
function init(){
// window.requestFileSystem is recognized, so far so good.
window.requestFileSystem(1, 0, function(fileSystem){
alert('success');
}, function(e){
// 'e' is an object, {code: 'Class not found'}
alert('Error accessing local file system');
});
}
</script>
<div class="app">
<h1>Apache Cordova</h1>
...
</div>
<script type="text/javascript" src="cordova.js"></script>
</body>
config.xml中
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.fwd.cwptakeonsheetsv1" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>CWPTakeOnSheetsV1</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<feature name="App">
<param name="android-package" value="org.apache.cordova.App" />
</feature>
<feature name="Device">
<param name="android-package" value="org.apache.cordova.device.Device" />
</feature>
<feature name="File">
<param name="android-package" value="org.apache.cordova.file" />
<param name="android-package" value="org.apache.cordova.file.FileUtils" />
<param name="onload" value="true" />
<param name="android-package" value="org.apache.cordova.FileUtils" />
</feature>
<feature name="FileTransfer">
<param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
</feature>
</widget>
Cordova的requestFileSystem.js
/**
* Request a file system in which to store application data.
* @param type local file system type
* @param size indicates how much storage space, in bytes, the application expects to need
* @param successCallback invoked with a FileSystem object
* @param errorCallback invoked if error occurs retrieving file system
*/
var requestFileSystem = function(type, size, successCallback, errorCallback) {
argscheck.checkArgs('nnFF', 'requestFileSystem', arguments);
var fail = function(code) {
errorCallback && errorCallback(new FileError(code));
};
if (type < 0) {
fail(FileError.SYNTAX_ERR);
} else {
// if successful, return a FileSystem object
var success = function(file_system) {
if (file_system) {
if (successCallback) {
// grab the name and root from the file system object
var result = new FileSystem(file_system.name, file_system.root);
successCallback(result);
}
}
else {
// no FileSystem object returned
fail(FileError.NOT_FOUND_ERR);
}
};
// The error happens in exec()
exec(success, fail, "File", "requestFileSystem", [type, size]);
}
};
答案 0 :(得分:2)
我想我发现了问题(至少在我的情况下)。我一遍又一遍地挣扎着这个突然出现:
只需打开plugins / android.json并将'config.xml'标题下的任何条目移动到'res / xml / config.xml'标题。
我认为这是某些插件(在我的情况下,Immersify)没有切换到新的config.xml位置的问题。修复此问题后,所有'缺失'插件神奇地出现在我的platforms / android / res / xml / config.xml文件中,并且'找不到类'错误消失了。
答案 1 :(得分:1)
你检查过插件文件夹中生成的android.json吗? 我有一个类似的问题,因为一些'尚未更新到3.4'插件,如sqlite在此文件中生成错误的方向(在构建时使用)。这导致从我的实际config.xml中删除一些其他插件
答案 2 :(得分:0)
我最终解决了我的问题。以下是我为使其发挥作用所采取的措施:
将所有JavaScript移至 index.html 的主要部分(包括对 .js 文件的引用)。
从 config.xml 中取出所有功能标签。我的 /platforms/android/AndroidManifest.xml 仍然包含:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
从我的代码中取出所有alerts()
和自定义调试功能。我不知道延迟是否会导致问题或是什么,但似乎有影响。
我还注意到,如果window.requestFileSystem
为undefined
,则可能是由于JavaScript错误导致无法加载。
有一个很好的例子here - 感谢Ram发布这个。
感谢@QuickFix的回复!