其实能够直接用VS编译cordova,可是我要添加插件的时候却犯难了,不知道如何作起,网上找了半天没弄出个因此然,只好用nodejs添加插件,找出插件安装的位置,再放置到VS项目中。 css
这里的总结1-3都是围绕这个问题来的,这里添加的插件以 org.apache.cordova.device 为例。 node
<feature name="Device">
<param name="wp-package" value="Device" />
</feature> apache
项目目录\Plugins\org.apache.cordova.device\Device.cs app
之后插件的cs文件也放入这里 函数
项目目录\www\plugins\org.apache.cordova.device\www\device.js ui
之后插件的js文件也放入这里 this
项目目录\www\cordova_plugins.js spa
内容以下: .net
cordova.define('cordova/plugin_list', function(require, exports, module) { module.exports = [ { "file": "plugins/org.apache.cordova.device/www/device.js", "id": "org.apache.cordova.device.device", "clobbers": [ "device" ] }/* 之后的插件也在这里添加进来 */ ] });
这是由于有时候,咱们编译完某个项目才添加的插件,有可能致使插件没有写进编译里,这时候按下列顺序走一遍。 插件
① 移除平台项目 "cordova platform rm wp8"
② 添加须要的插件 "cordova platform add 插件包名"
③ 添加平台项目 "cordova platform add wp8"
④ 从新编译生成 "cordova build wp8"
还有更快捷的方法,就是在无效的插件的js文件里,也就是步骤三的js文件,这里以org.apache.cordova.dialogs.notification为例:
cordova.define("org.apache.cordova.dialogs.notification", function(require, exports, module) { //之前的文件内容 }
把以前的文件内容包含住,这样程序才能调用到这个插件模块。
也就是找不到msbuild命令,通常来讲,这个命令在WP8 SDK最新版本对于的.NET Framework文件夹下
个人是C:\Windows\Microsoft.NET\Framework\v4.0.30319
其实你有安装,可是他仍是找不到,由于编译器在寻找这个msbuild时,会进行msbuild -version检查,程序所期待的是英文返回,而咱们当地环境是中文的,因此形成错误。
这里有两个解决方法:
找到程序的安装检查文件,通常在C:\Users\用户名\.cordova\lib\wp\cordova\版本号\wp8\bin\check_reqs.js,继续找到SystemRequiermentsMet函数,这里的check_command函数执行就是会进行msbuild -version检查,因此能够把这一行注释掉。
set PATH=原来的值;C:\Windows\Microsoft.NET\Framework\v4.0.30319\;
这样就能准确找到msbuild文件了。
其实我不知道为什么还会产生这个错误,由于这个仍是msbuild的问题,这时候咱们能够在第一个错误的解决方法一中,继续修改check_reqs.js的SystemRequiermentsMet函数,使 var msversion = true;就行了。
这是由于xml文件有bom头的缘故,咱们能够在载入xml前去掉头部空白便可.
修改 "你的NPM存放文件路径\node_modules\cordova\src\config_parser.js" 文件:
将 this.doc = xml.parseElementtreeSync(path);
改成 this.doc = new et.ElementTree(fs.readFileSync(path, 'utf-8').replace("\ufeff", ""));
缘由见:http://www.multiasking.com/blog/xml2js-sax-js-non-whitespace-before-first-tag/
若是仍有错误,查看如下文件xml声明是否正确:
"你的项目目录\platforms\wp8\CordovaWP8AppProj.csproj"
"你的项目目录\platforms\wp8\Properties\WMAppManifest.xml"
<?xml version='1.0' encoding='utf-8'?>
这里的错误通常会报如下错:
[Error: An error occurred while building the wp8 project.ERROR: MSBuild failed to create .xap when building cordova-wp8 for debugging.]
这里的编译也是使用msbuild程序,编译执行的js文件是:
你的项目目录\platforms\wp8\cordova\lib\build.js
找到大约140行左右,将 var cmd = 'msbuild "' + get_solution_name(path) + '" /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /p:Configuration=Debug';
参数部分加上"/l:FileLogger,Microsoft.Build;logfile=build.log;"
便是改成 var cmd = 'msbuild "' + get_solution_name(path) + '" /l:FileLogger,Microsoft.Build;logfile=build.log;/clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo /p:Configuration=Debug';
这样在 "你的项目目录\platforms\wp8目录" 下就能找到build.log日志文件,打开查看问题所在。
我遇到的问题是:
一、解决方案文件 error MSB5010: 未找到文件格式头。(同2的错误,头部有乱码)
二、未找到项目文件“项目目录\platforms\wp8\HelloWorld.csproj”。
已完成生成项目“CordovaWP8Solution.sln”的操做 - 失败。
我这里的项目是HelloWorld,可是工程目录给个人文件倒是:CordovaWP8AppProj.csproj,这里把名字改成须要的就行了,也就是将CordovaWP8AppProj.csproj重命名为HelloWorld.csproj。
问题还没解决,虽然这一步不影响我添加插件了。
由于我是用真机调试的,因此到这里我用cordova run wp8会出现乱码错误:
很明显又是本地的中文环境致使的乱码,只要找到错误,咱们就能够解决。
这个错误提示实际上是在文件 "你的项目目录\platforms\wp8\cordova\lib\deploy.js"
大概109行左右产生的(代码:Log(line, true);)
咱们修改错误提示上面一行的代码,使之在命令行界面显示。
将Log("ERROR: command failed in deploy.js : " + command);
改成Log("ERROR: command failed in deploy.js : " + command, true);
这时咱们再执行一遍cordova run wp8,发现整个错误是由于执行如下命令产生的:
你的项目目录\platforms\wp8\cordova\lib\CordovaDeploy\CordovaDeploy\bin\Debug>CordovaDeploy.exe "你的项目目录\platforms\wp8" -d:0
PS:这里的-d:0指的是链接第一个device(设备)调试,个人就是lumia 920,在VS里能够看到的顺序,若是是虚拟机,可能就是一、二、三、4了
这时候咱们从新打开一个cmd窗口,执行以上命令,就能获得没有乱码的中文错误提示。
我就安装了2个开发人员应用程序,多是还没注册开发者的缘故吧,注册以后貌似是10个的上限。
先卸了一个,再打命令:cordova run wp8,完工。
详情见:点击这里
因为应用第一次调用navigator.notification.beep的时候须要加载蜂鸣文件notification-beep.wav,致使蜂鸣不及时,因此咱们能够预先加载一次蜂鸣的音频文件,音量设为0就好.
详情见:点击这里
在CSS中加入如下代码:
@viewport{height:device-height} @viewport{width:device-width} @-ms-viewport{height:device-height} @-ms-viewport{width:device-width}
方法一使用后,使用点击事件会有卡顿,这时改成tap事件就行了,在IE中是MSPointerDown或者MSpointerUp就行了
在项目的MainPage.xaml文件中,找到这2个属性
SupportedOrientations="PortraitOrLandscape"//这个是支持横竖屏的属性,咱们将值改成Portrait就行了
Orientation="Portrait"//这个是初始化时指定横屏或者竖屏