自定义 PhoneGap 插件 (iOS) 功能问题

Posted

技术标签:

【中文标题】自定义 PhoneGap 插件 (iOS) 功能问题【英文标题】:Custom PhoneGap Plugin (iOS) Function Issue 【发布时间】:2012-03-06 19:17:10 【问题描述】:

我正在使用本教程创建自定义 PhoneGap 插件: http://wiki.phonegap.com/w/page/36753496/How%20to%20Create%20a%20PhoneGap%20Plugin%20for%20ios

我已经成功地使用了作者的示例,但是我有几个问题我无法找到答案。

创建javascript函数时,代码为:

var MyPlugin = 

     nativeFunction: function(types, success, fail) 
          return PhoneGap.exec(success, fail, "PluginClass", "print", types);
     
;

有没有办法在没有var MyPlugin = ...;nativeFunction 的情况下进行设置?换句话说,我们能不能定义一个我们插件的函数,比如myfunc = function()...

其次,假设有一种方法可以做到以上几点,这个代码可以:

MyPlugin.nativeFunction(
      ["HelloWorld"] ,
      function(result) 
           alert("Success : \r\n"+result);      
      ,
      function(error) 
           alert("Error : \r\n"+error);      
      
  );  

(这是测试插件的测试代码)也可以用更标准化的方式编写吗?即,只是调用没有 nativeFunction 部分的 Javascript 函数?

非常感谢您的任何意见,谢谢!

【问题讨论】:

【参考方案1】:

插件的 phonegap 文档很烂。老实说,我在尝试创建自己的游戏时遇到了很多问题。一些提示:

这样做的原因

var MyPlugin = ;

是因为这允许我们限定特定于该 js 对象的内容。 示例:

MyPlugin.myFunction();

我最喜欢的创建插件的方法,类似于你的问题,是对它们进行原型制作

var MyPlugin = ; // our object

MyPlugin.prototype.myFunction = function(success,fail,types)


让插件火起来的关键是这个 -

PhoneGap.exec(success,fail,"MyPlugin","myFunction",types);

但是他们遗漏了一点,如果我们想为我们的插件提供选项怎么办?如果我们想做的不仅仅是传递一个字符串,那么这个例子就行不通了。修复很简单,但根本没有人谈论。

var MyPlugin = ;
MyPlugin.prototype.myFunction = function(success,fail,options)
  var defaults = 
        foo: '', // these are options
        bar: '',
    ;

    // this parses our "options"
    for(var key in defaults) 
        if(typeof options[key] !== "undefined") defaults[key] = options[key];
    

    return PhoneGap.exec(success,fail,"MyPlugin","myFunction",[defaults]);

当我们在没有 javascript 的情况下调用它时 -

var foo = MyPlugin.myFunction(success,fail,
foo:'hello',
bar:'world'
);

您会注意到大多数 phonegap API 都使用这种语法,我觉得奇怪的是他们的文档并没有真正讨论如何做到这一点。

我有一篇关于我创建的插件的帖子,您可以查看它以供参考。 博客 - http://www.drewdahlman.com/meusLabs/?p=138 Git - https://github.com/DrewDahlman/ImageFilter

【讨论】:

确保您使用的是 phonegap 构造函数 - PhoneGap.addConstructor(function () if(!window.plugins) window.plugins = ; window.plugins. MyPlugin = new MyPlugin(); ); 是的,它应该放在你的插件 js 文件中 - 看看这个 git 项目 - github.com/DrewDahlman/ImageFilter/blob/master/plugin/… 最后一件事 - 尝试像这样定义函数var MyPlugin = function();

以上是关于自定义 PhoneGap 插件 (iOS) 功能问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中使用自定义 phonegap 3.3 插件

为 Phonegap 构建创建自定义 AdMob 插件(适用于 iOS 和 Android)

PhoneGap 3.x / iOs6 iOs7 / AngularJs - 插件对象不适用于自定义 www/index.html 位置

如何使用自定义插件测试 iPhone PhoneGap 应用

phonegap 2.9.1 的 IOS Write 插件 [关闭]

用于 ios 的 PhoneGap 插件返回 FAILED pluginJSON