我想实现这个插件:https://github.com/christocracy/cordova-plugin-background-fetch .我使用 CLI 安装了插件,然后将 BackgroundFetch.js 文件复制到我的 www 目录并在 index.html 中引用它。我将示例代码放在 DeviceReady 函数中的 git url 中。尽管如此,在启动时我仍然面临错误:
类型错误:“未定义”不是对象(评估“Fetcher.configure”)
有人可以告诉我为什么会这样吗?我已经尝试了两天,但没有成功。任何帮助将不胜感激。提前致谢!
EDIT1:抱歉我之前没有提到它,我使用命令行创建了一个cordova项目并添加了如上所述的插件,然后在iOS模拟器和iPhone 4S上运行它。两者都给出相同的错误。我将代码包装在一个 try-catch block 中并警告错误,这就是出现的错误。
看到 Clawish 的建议后,我删除了 js 文件和对它的引用,并再次删除并添加了插件。现在我没有收到任何错误,但在日志中没有看到“CDVBackgroundFetch 配置”。如果我在模拟器上模拟后台提取,我会收到错误消息:-
CDVBackgroundFetch onFetch
警告:应用程序委托(delegate)收到了对 -application:performFetchWithCompletionHandler: 的调用,但从未调用过完成处理程序。
我哪里错了?除了添加示例代码以在 onDeviceReady 中调用 Fetcher.configure 之外,我没有对代码进行任何更改
EDIT2:
在看到您的 Clawfish 的第二次编辑后,我删除了服务调用并缩短了功能,如下所示:
onDeviceReady: function() {
app.receivedEvent('deviceready');
var Fetcher = window.plugins.backgroundFetch;
// Your background-fetch handler.
var fetchCallback = function() {
console.log('BackgroundFetch initiated');
Fetcher.finish();
}
Fetcher.configure(fetchCallback);
},
不过,我没有看到任何日志消息说“CDVBackgroundFetch 配置”并且在模拟后台获取时出现与上面相同的警告。似乎 Fetch 部分是在没有首先运行 configure 的情况下执行的。
最佳答案
编辑2:我猜你已经从文档中添加了整个示例代码(声明 var Fetcher
和处理程序 var fetchCallback
并且在声明两者之后,你运行 Fetcher.configure(fetchCallback);
。
问题可能是您的 index.html
中没有引用 jQuery。并且代码在看到 $.get(...)
行时停止运行.如果是这样,download jQuery,把它放到你的www
文件夹,并从您的 index.html
中引用它.
您是否看到控制台消息 console.log('BackgroundFetch initiated');
? /heartbeat.json
呢? ,你改了吗?
编辑:您不需要将 BackgroundFetch.js 复制到您的 www
目录,您也不需要在 index.html
中引用它.尝试删除您的 index.html
中的引用并在安装后保持插件文件不变。如果您更改了有关文件结构的某些内容,您应该 cordova plugin remove
插件和add
之后再次。
我不知道您从哪个控制台收到此错误。如果它是一个浏览器控制台,比如 Chrome,那就不足为奇了,因为 Fetcher 只在 iDevice(或 iOS 模拟器)上工作。
并且 Cordova 控制台插件不会打印此类消息。
尝试使用 iOS 模拟器中的代码。
关于Cordova Background Fetcher 插件不适用于 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891661/