cordova.plugins 给出未定义



我正在使用Phonegap Build服务编译一个ionic-Cordova应用程序。在实际设备上测试应用程序时(并通过一些调试日志消息),我同时得到 cordova.plugins 和 window.cordova.plugins 未定义。奇怪的是,当我在本地编译应用程序(使用 Android SDK)并在我的设备上运行它时,它工作正常。该问题仅发生在Phonegap Build上。我比较了配置.xml它们很相似。这是我的配置.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.ionicframework.reader491854" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <preference name="loglevel" value="DEBUG" />
    <preference name="AndroidLaunchMode" value="singleTop" />
    <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.FileUtils" />
        <param name="onload" value="true" />
    </feature>
    <feature name="FileTransfer">
        <param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
    </feature>
    <feature name="Clipboard">
        <param name="android-package" value="com.verso.cordova.clipboard.Clipboard" />
    </feature>
    <feature name="SocialSharing">
        <param name="android-package" value="nl.xservices.plugins.SocialSharing" />
    </feature>
    <feature name="Toast">
        <param name="android-package" value="nl.xservices.plugins.Toast" />
    </feature>
    <feature name="InAppBrowser">
        <param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser" />
    </feature>
    <feature name="TTS">
        <param name="android-package" value="org.apache.cordova.plugin.TTS" />
    </feature>
    <feature name="Zip">
        <param name="android-package" value="org.apache.cordova.Zip" />
    </feature>
    <name>Test Reader</name>
    <description>
        Description here
    </description>
    <author email="hi@ionicframework" href="http://ionicframework.com/">
        Author name
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="webviewbounce" value="false" />
    <preference name="UIWebViewBounce" value="false" />
    <preference name="DisallowOverscroll" value="true" />
    <preference name="BackupWebStorage" value="none" />
    <preference name="Fullscreen" value="true" />
    <feature name="StatusBar">
        <param name="ios-package" onload="true" value="CDVStatusBar" />
    </feature>
    <feature name="NetworkStatus">
        <param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" />
        <param name="android-package" value="org.apache.cordova.NetworkManager" />
    </feature>
    <feature name="Keyboard">
        <param name="android-package" value="com.ionic.keyboard.IonicKeyboard" />
        <param name="onload" value="true" />
        <param name="ios-package" onload="true" value="IonicKeyboard" />
    </feature>
    <icon src="www/img/logo.png" />
</widget>

请帮忙吗?

好的,

我今天早上解决了它。以下是我为使其正常工作所做的工作,适用于可能面临类似问题的任何人:

1) phonegap 构建配置中的根标签命名空间需要为:xmlns:gap="http://phonegap.com/ns/1.0"

2)Phonegap Build不以这种方式使用插件,只有Phonegap CLI使用。我的测试是在本地使用 SDK 进行的,我所有的插件都是 android 平台文件夹中的实际类。要使用Phonegap Build,您不必将插件与源代码一起发送,而是从中央存储库(实际上是两个)中选择所需的插件。它们是:https://build.phonegap.com/plugins 和 http://plugins.cordova.io/。当然,我必须返回并检查我的每个插件是否在这些存储库中。如果没有,我必须找到替代方案。所以现在我的新配置.xml看起来像这样:

<widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0"
        id="package.id" version="1.1.1">
    <name>Name</name>
    <description>
        Description here
    </description>
    <author email="email@email.com" href="http://www.domain.com">
        Author Name
    </author>
    <content src="index.html"/>
    <access origin="*"/>
    <icon src="icon.png"/>
    <preference name="webviewbounce" value="false"/>
    <preference name="UIWebViewBounce" value="false"/>
    <preference name="DisallowOverscroll" value="true"/>
    <preference name="BackupWebStorage" value="none"/>
    <preference name="Fullscreen" value="true"/>
    <preference name="AndroidLaunchMode" value="singleTop"/>
    <gap:plugin name="org.apache.cordova.device" />
    <gap:plugin name="org.apache.cordova.file" />
    <gap:plugin name="org.apache.cordova.file-transfer" />
    <gap:plugin name="org.apache.cordova.network-information" />
    <gap:plugin name="org.apache.cordova.inappbrowser" />
    <gap:plugin name="org.apache.cordova.statusbar" version="0.1.4" source="pgb"/>
    <gap:plugin name="com.ionic.keyboard" version="1.0.3" source="pgb"/>
    <gap:plugin name="com.verso.cordova.clipboard" version="0.1.0" source="pgb"/>
    <gap:plugin name="nl.x-services.plugins.socialsharing" version="4.3.8" source="pgb"/>
    <gap:plugin name="nl.x-services.plugins.toast" version="2.0.2" source="pgb"/>
    <gap:plugin name="com.wordsbaking.cordova.tts" version="0.2.1" source="plugins.cordova.io"/>
</widget>

3) 由于未正确包含"设备"插件,因此未触发 deviceready 事件。我没有正确等待此事件,当我进行插件修复时,它从未真正触发,这使我们进入了下一点。

4)这是最棘手的,花了几个小时。设备就绪有时被解雇,有时不被解雇。这是通过将 作为索引.html文件中最后一个包含的脚本来解决的。我不知道原因,尤其是 cordova 文档提到 deviceready 侦听器的行为不同,如果事件在添加侦听器之前已经触发,则会立即调用回调。无论如何,这解决了这个窍门。

祝你好运!

最新更新