Cordova - 如何在 Windows 移动设备上获取磁贴标题
Cordova - How to get a tile title on Windows mobile
我正在用我的 html/js-code 创建一个 cordova 应用 cordova-config:
<?xml version='1.0' encoding='utf-8'?>
<widget id="myapp" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>My App</name>
<description>
A small demo app
</description>
<author email="dont@ask.me" href="http://anyth.ing">
My App
</author>
<content src="index.html" />
<plugin name="cordova-plugin-splashscreen" spec="3.2.0"/>
<access origin="*" />
<preference name="Fullscreen" value="true"/>
<platform name="windows">
<!-- splashs and icons -->
</platform>
</widget>
但是当我将应用程序部署到我的移动设备(Windows 10 移动设备)时,开始屏幕上的磁贴不显示标题。应用列表中的应用本身有标题,但没有磁贴。
如何在开始屏幕磁贴中获取磁贴标题?
此致
特诺达
据我所知,Cordova 没有提供添加 Windows 磁贴标题的首选项。您会假设 Cordova 只会采用 config.xml 中 name 元素中的名称并将其用于主屏幕图块。
为了在开始屏幕磁贴中获得标题,您需要编辑包。windows10.appxmanifest 位于 platform/windows 目录下。
在 uap:DefaultTile 元素下添加以下内容使其适用于我:
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square310x310Logo" />
<uap:ShowOn Tile="square150x150Logo" />
<uap:ShowOn Tile="wide310x150Logo" />
</uap:DefaultTile>
Also:在元素 ShortName 属性中添加所需的标题 uap:DefaultTile.
添加到 Evertson 的回答中:
为避免必须继续编辑 platform/windows 文件,您可以将 package.windows10.appxmanifest 复制到 res/native/windows 文件夹。代码应如下所示:
<uap:DefaultTile ShortName="..." Square310x310Logo="..." etc.>
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square310x310Logo" />
<uap:ShowOn Tile="square150x150Logo" />
<uap:ShowOn Tile="wide310x150Logo" />
</uap:ShowNameOnTiles>
</uap:DefaultTile>
当然,这意味着您需要在更改配置时随时编辑清单。
有趣的是,旧的 Windows 8.1 清单 (package.windows.appxmanifest) 和 Windows 8.1 phone 清单 (package.phone.appxmanifestfile) 默认已经包含此信息.不知道为什么要删除 windows 10.
编辑
您可以创建一个挂钩来插入 XML,这样您就不必担心将更改应用到 config.xml:
添加以下内容:hooks/showNameOnTiles.js
module.exports = function (context) {
"use strict";
var fs = require('fs'),
path = context.opts.projectRoot + '/platforms/windows/package.windows10.appxmanifest',
manifest = fs.readFileSync(path).toString(),
lines, i, lineNo;
if (!manifest.includes('uap:ShowNameOnTiles')) {
lines = manifest.split(/\r?\n/);
for (i = 0; i < lines.length; i++) {
if (lines[i].indexOf('uap:DefaultTile') !== -1) {
lineNo = i;
break;
}
}
if (lineNo) {
lines[lineNo] = lines[lineNo].replace('/>', '>').replace(' >', '>');
lines.splice(lineNo + 1, 0, [
'<uap:ShowNameOnTiles>',
'<uap:ShowOn Tile="square310x310Logo" />',
'<uap:ShowOn Tile="square150x150Logo" />',
'<uap:ShowOn Tile="wide310x150Logo" />',
'</uap:ShowNameOnTiles>'
].join('\n'));
lines.splice(lineNo + 2, 0, '</uap:DefaultTile>');
fs.writeFileSync(path, lines.join('\n'));
}
}
};
在config.xml中添加:
<platform name="windows">
<hook type="after_prepare" src="hooks/showNameOnTiles.js" />
</platform>
更简单的方法
有一种更简单的方法可以做到这一点,但我无法让它工作;您可以创建自己的插件:
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
id="com.blah.addtiletitleplugin" version="1.0.0">
<name>Adds the title to windows 10 tiles</name>
<description>Adds the title to windows 10 tiles</description>
<platform name="windows">
<config-file target="package.windows10.appxmanifest" parent="/Package/Applications/Application/uap:VisualElements/uap:DefaultTile/">
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square310x310Logo" />
<uap:ShowOn Tile="square150x150Logo" />
<uap:ShowOn Tile="wide310x150Logo" />
</uap:ShowNameOnTiles>
</config-file>
</platform>
</plugin>
但是,当我尝试添加插件时,visual studio 拒绝解析它,即使我已经指定:
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
如果我删除 uap: 部分,它会解析并添加,但当然会在构建时失败。
我正在用我的 html/js-code 创建一个 cordova 应用 cordova-config:
<?xml version='1.0' encoding='utf-8'?>
<widget id="myapp" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>My App</name>
<description>
A small demo app
</description>
<author email="dont@ask.me" href="http://anyth.ing">
My App
</author>
<content src="index.html" />
<plugin name="cordova-plugin-splashscreen" spec="3.2.0"/>
<access origin="*" />
<preference name="Fullscreen" value="true"/>
<platform name="windows">
<!-- splashs and icons -->
</platform>
</widget>
但是当我将应用程序部署到我的移动设备(Windows 10 移动设备)时,开始屏幕上的磁贴不显示标题。应用列表中的应用本身有标题,但没有磁贴。
如何在开始屏幕磁贴中获取磁贴标题?
此致
特诺达
据我所知,Cordova 没有提供添加 Windows 磁贴标题的首选项。您会假设 Cordova 只会采用 config.xml 中 name 元素中的名称并将其用于主屏幕图块。
为了在开始屏幕磁贴中获得标题,您需要编辑包。windows10.appxmanifest 位于 platform/windows 目录下。
在 uap:DefaultTile 元素下添加以下内容使其适用于我:
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square310x310Logo" />
<uap:ShowOn Tile="square150x150Logo" />
<uap:ShowOn Tile="wide310x150Logo" />
</uap:DefaultTile>
Also:在元素 ShortName 属性中添加所需的标题 uap:DefaultTile.
添加到 Evertson 的回答中:
为避免必须继续编辑 platform/windows 文件,您可以将 package.windows10.appxmanifest 复制到 res/native/windows 文件夹。代码应如下所示:
<uap:DefaultTile ShortName="..." Square310x310Logo="..." etc.>
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square310x310Logo" />
<uap:ShowOn Tile="square150x150Logo" />
<uap:ShowOn Tile="wide310x150Logo" />
</uap:ShowNameOnTiles>
</uap:DefaultTile>
当然,这意味着您需要在更改配置时随时编辑清单。
有趣的是,旧的 Windows 8.1 清单 (package.windows.appxmanifest) 和 Windows 8.1 phone 清单 (package.phone.appxmanifestfile) 默认已经包含此信息.不知道为什么要删除 windows 10.
编辑
您可以创建一个挂钩来插入 XML,这样您就不必担心将更改应用到 config.xml:
添加以下内容:hooks/showNameOnTiles.js
module.exports = function (context) {
"use strict";
var fs = require('fs'),
path = context.opts.projectRoot + '/platforms/windows/package.windows10.appxmanifest',
manifest = fs.readFileSync(path).toString(),
lines, i, lineNo;
if (!manifest.includes('uap:ShowNameOnTiles')) {
lines = manifest.split(/\r?\n/);
for (i = 0; i < lines.length; i++) {
if (lines[i].indexOf('uap:DefaultTile') !== -1) {
lineNo = i;
break;
}
}
if (lineNo) {
lines[lineNo] = lines[lineNo].replace('/>', '>').replace(' >', '>');
lines.splice(lineNo + 1, 0, [
'<uap:ShowNameOnTiles>',
'<uap:ShowOn Tile="square310x310Logo" />',
'<uap:ShowOn Tile="square150x150Logo" />',
'<uap:ShowOn Tile="wide310x150Logo" />',
'</uap:ShowNameOnTiles>'
].join('\n'));
lines.splice(lineNo + 2, 0, '</uap:DefaultTile>');
fs.writeFileSync(path, lines.join('\n'));
}
}
};
在config.xml中添加:
<platform name="windows">
<hook type="after_prepare" src="hooks/showNameOnTiles.js" />
</platform>
更简单的方法
有一种更简单的方法可以做到这一点,但我无法让它工作;您可以创建自己的插件:
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
id="com.blah.addtiletitleplugin" version="1.0.0">
<name>Adds the title to windows 10 tiles</name>
<description>Adds the title to windows 10 tiles</description>
<platform name="windows">
<config-file target="package.windows10.appxmanifest" parent="/Package/Applications/Application/uap:VisualElements/uap:DefaultTile/">
<uap:ShowNameOnTiles>
<uap:ShowOn Tile="square310x310Logo" />
<uap:ShowOn Tile="square150x150Logo" />
<uap:ShowOn Tile="wide310x150Logo" />
</uap:ShowNameOnTiles>
</config-file>
</platform>
</plugin>
但是,当我尝试添加插件时,visual studio 拒绝解析它,即使我已经指定:
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
如果我删除 uap: 部分,它会解析并添加,但当然会在构建时失败。