我读过 Cordova 的教程,但我不确定他们是否给了我足够的信息。
编辑以显示更新的代码:
让我向您展示我的代码:
从 config.xml:
<plugin name="someMethod" value="MyPluginClass" />
现在是 Plugin.h:
#import <Cordova/CDV.h>
@interface MyPluginClass : CDVPlugin
- (void)someMethod:(CDVInvokedUrlCommand*)command;
@end
现在是 Plugin.m:
#import "Plugin.h"
@implementation MyPluginClass
- (void)someMethod:(CDVInvokedUrlCommand *)command
{
NSLog(@"YOU ARE READING THIS NATIVELY FROM A PLUGIN");
}
@end
显示的第一个 html 页面称为“index.html”
我只想要一个空白的 html 页面,它只运行一个调用 cordova.exec() 函数的脚本。我这样做的尝试失败了。我不知道是我的脚本做错了什么还是我在其他地方做错了什么,但这是我的 index.html:
<!DOCTYPE html>
<html>
<head>
<title>Cordova Device Ready Example</title>
<script type="text/javascript" charset="utf-8" src="cordova-2.3.0.js"></script>
<script type="text/javascript" charset="utf-8">
// Call onDeviceReady when Cordova is loaded.
//
// At this point, the document has loaded but cordova-2.3.0.js has not.
// When Cordova is loaded and talking with the native device,
// it will call the event `deviceready`.
//
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
// Cordova is loaded and it is now safe to make calls Cordova methods
//
function onDeviceReady() {
// Now safe to use the Cordova API
document.addEventListener("deviceready", function() {
cordova.exec(null,null,"MyPluginClass","someMethod",[]);
}, false);
}
</script>
</head>
<body onload="onLoad()">
</body>
</html>
我收到以下错误日志:
2013-01-17 11:36:31.782 CCT[1293:907] 错误:找不到插件“MyPluginClass”,或者不是 CDVPlugin。检查 config.xml 中的插件映射。
2013-01-17 11:36:31.787 CCT[1293:907] -[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["INVALID","MyPluginClass","someMethod",[]]
最佳答案
在 deviceready 事件触发之前,您不能对cordova 进行任何调用。做:
document.addEventListener("deviceready", function() {
cordova.exec(null,null,"MyPluginClass","someMethod",[]);
}, false);
编辑:对于上面列出的示例调用,您需要一个如下所示的 Objective-C 类:
@interface MyPluginClass : CDVPlugin
- (void)someMethod:(CDVInvokedUrlCommand*)command;
@end
注意类名和方法名,它们与对 cordova.exec
的调用相匹配另一个编辑:
您的
config.xml
应如下所示:<plugin name="MyPluginClass" value="MyPluginClass" />
(这些不一定必须相同,但 name
应该匹配 javascript 调用的第三个参数中的引用,并且 value
应该匹配您的 Objective-C 类的名称。有关为 iOS 开发插件的完整文档,请查看 guide