未捕获的ReferenceError:未定义ContactFindOptions

时间:2013-11-28 09:22:52

标签: javascript android cordova cordova-3

我遇到有关cordova / phonegap联系人的问题 这是我试图执行的代码,我输入了一个外部javascript文件:

function onDeviceReady() {
// find all contacts
var options = new ContactFindOptions();
options.filter = "*";
var fields = ["displayName", "name"];
navigator.contacts.find(fields, onSuccess, onError, options);
}

// onSuccess: Get a snapshot of the current contacts

function onSuccess(contacts) {
for (var i = 0; i < contacts.length; i++) {
    console.log("Display Name = " + contacts[i].displayName);
}
}

// onError: Failed to get the contacts

function onError(contactError) {
alert('onError!');
}

这是来自phonegap API文档的代码: link

原始代码是在每个字段中找到所有带有'bob'的联系人 我把所有联系人都改为“*”(只是一个星星)。

只需按一下按钮即可调用onDeviceReady函数。

我在logcat中遇到的错误是:

[INFO:CONSOLE(81)] "Uncaught ReferenceError: ContactFindOptions is not defined"  
81 is the linenumber with: var options = new ContactFindOptions();

有谁知道如何使函数ContactFindOptions()起作用?

如果您需要更多信息,请告诉我们。

4 个答案:

答案 0 :(得分:1)

可能会发生这种情况,因为您的cordova不理解此功能。 您需要添加插件,您需要添加联系人插件。 在您的cordova项目中使用命令行运行:

cordova plugin add org.apache.cordova.contacts

这将在 AndroidManifest.xml

中添加以下内容
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />

并将以下内容添加到 res \ xml \ config.xml

<feature name="Contacts">
   <param name="android-package" value="org.apache.cordova.contacts.ContactManager" />
</feature>

答案 1 :(得分:0)

使用Phonegap访问Android上的联系人: -

function onDeviceReady() {
    // specify contact search criteria
    var options = new ContactFindOptions();
    options.filter="";          // empty search string returns all contacts
    options.multiple=true;      // return multiple results
    filter = ["displayName"];   // return contact.displayName field

    // find contacts
    navigator.contacts.find(filter, onSuccess, onError, options);
}

var names = [];

// onSuccess: Get a snapshot of the current contacts
//
function onSuccess(contacts) {
    for (var i=0; i<contacts.length; i++) {
        if (contacts[i].displayName) {  // many contacts don't have displayName
            names.push(contacts[i].displayName);
        }
    }
    alert('contacts loaded');
}

您可以尝试阅读文档和如何使用的实现我提供的一些链接可以帮助您Saving Contacts with PhoneGap Android Example of Creating a full contact with PhoneGap

答案 2 :(得分:0)

我遇到了同样的问题,因为科尔多瓦的deviceready事件尚未发生。通过将任何Cordova API调用包装在deviceready事件侦听器中来解决此问题:

document.addEventListener("deviceready", function(){
    console.log("deviceready fired!"); //do your stuff
});

答案 3 :(得分:0)

有同样的问题,添加了这行代码并且它有效。它链接到科尔多瓦图书馆。

<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript">
    app.initialize();
</script>