我一直在为我的Ionic 2应用程序编写一个小的自定义插件,以便在上次系统启动后获得设备正常运行时间。
它在Android和iOS上运行良好,但我很难在Windows Phone 10上运行。
尝试调用Windows运行时组件时出现以下错误:
使用命令调用native的异常:: Uptime :: getUptime :: exception = ReferenceError:'Environment'未定义
这是Windows运行时Cmponent(C#),它是在Uptime.winmd文件中编译的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Uptime
{
public sealed class Uptime
{
public static string getUptime()
{
return (Environment.TickCount & Int32.MaxValue).ToString();
}
}
}
在Plugin.xml中引用了Uptime.winmd(以及iOS和Android的其他本机实现,以及其他js脚本):
<?xml version='1.0' encoding='utf-8'?>
<plugin id="cordova-plugin-uptime" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android">
<name>Uptime</name>
<js-module name="Uptime" src="www/Uptime.js">
<clobbers target="cordova.plugins.Uptime"/>
</js-module>
<platform name="android">
<config-file parent="/*" target="res/xml/config.xml">
<feature name="Uptime">
<param name="android-package" value="cordova.plugin.uptime.Uptime"/>
</feature>
</config-file>
<config-file parent="/*" target="AndroidManifest.xml"/>
<source-file src="src/android/Uptime.java" target-dir="src/cordova-plugin-uptime/Uptime"/>
</platform>
<platform name="ios">
<config-file parent="/*" target="config.xml">
<feature name="Uptime">
<param name="ios-package" value="Uptime"/>
</feature>
</config-file>
<source-file src="src/ios/Uptime.m"/>
</platform>
<platform name="windows">
<js-module src="src/windows/UptimeProxy.js" name="UptimeProxy">
<merges target="" />
</js-module>
<framework src="src/windows/Uptime.winmd" custom="true" target="phone"/>
</platform>
</plugin>
从UptimeProxy.js调用Uptime.winm:
cordova.commandProxy.add("Uptime",{
getUptime:function(successCallback, errorCallback, strInput) {
var res = Uptime.Uptime.getUptime();
if(res.indexOf("Error") == 0) {
errorCallback(res);
}
else {
successCallback(res);
}
}
});
这是从Uptime.js调用的:
var exec = require('cordova/exec');
exports.getUptime = function() {
return new Promise(function(success, error) {
exec(success, error, "Uptime", "getUptime", []);
})
};
这是从我的应用程序调用的(来自(click)事件,因此它不是尚未加载依赖项的问题。)
Uptime.js适用于Android和iOS。
UptimeProxy.js肯定被调用,因为我可以在
之前看到日志 var res = Uptime.Uptime.getUptime();
我使用Ionic / cordova CLI生成项目,然后使用VS2015在我的设备上部署。
离子信息:
Your system information:
Cordova CLI: 6.4.0
Ionic Framework Version: 2.0.
Ionic CLI Version: 2.1.14
Ionic App Lib Version: 2.1.7
Ionic App Scripts Version: 0.
ios-deploy version: Not insta
ios-sim version: Not installe
OS: Windows 10
Node Version: v6.9.1
Xcode version: Not installed
插件和应用程序的编译设置为“Debug - any CPU”。
我肯定做错了什么,但是我使用C#代码检查了WP10的其他插件并没有发现差异。
由于cordova文档远非详尽无遗,我对该怎么做没有任何线索。
有什么想法吗?
提前致谢,如果您需要有关我的设置的更多信息,请不要犹豫。