在 cordova ios 应用程序上延迟显示外来字符
Foreign characters displaying delayed on cordova ios application
我们正在使用 Webfont Loader 加载 google 字体。在 WebFont.load 的活动回调中,我们加载主脚本和 bootstrap angular.js 应用程序。
<script type="text/javascript">
WebFontConfig = {
google: {
families: ['Open Sans:400,700,700i,400i:latin-ext']
},
active: function() {
var mainScript = document.createElement('script');
mainScript.src = "/js/main.js";
mainScript.onload = function() {
angular.bootstrap(document, ['cob']);
}
document.body.appendChild(mainScript);
}
};
WebFont.load(WebFontConfig);
</script>
为了让浏览器在加载 google 字体文件之前使用默认字体,我们为 .wf-active class
设置了字体
html.wf-active {
font-family: 'Open Sans', sans-serif;
}
在 angular 运行 中,我们切换应用程序并从加载程序中清除屏幕并显示应用程序。
angular.module('mymodule')
.run([function() {
$rootScope.appLoaded = true;
}
]);
html
<body>
<div class="app-loader" ng-hide="appLoaded">loading...</div>
<div class="page-container" ng-if="appLoaded">
application loaded. <button>GİRİŞ</button>
</div>
</body>
我们看到 "loading..." 直到字体文件加载,然后应用程序 bootstrap 成功。
但是按钮文本呈现为 "G R " 几秒钟,一段时间后“İ”和“Ş”字符加载到屏幕上,我们在按钮上看到 GİRİŞ。
我确定字体文件在应用程序 bootstraps 之前加载,因为字体在应用程序加载后不会改变。
可能无关紧要,但是,我在页面上找到了一些图像文件,并且外来字符与图像文件一起呈现。因此存在某种奇怪的屏幕渲染延迟。
我们只在 iOS 应用程序上遇到此问题,我已经在 iPhone 6 和 6s 以及 xcode 模拟器上对其进行了测试。
这在浏览器(safari、chrome 和 firefox)和我们使用相同的 cordova 项目创建的 android 应用程序上按预期工作。
尝试了各种preload方法,正想放弃的时候,突然发现一个事实here
most browsers download fonts when they're used in a page rather than
when they're declared in CSS.
该字体的 latin-ext 子集似乎被延迟,直到它在页面内部使用。
我已经通过放置一个虚拟字符 (©) 解决了这个问题,这将使它在加载屏幕上下载 latin-ext 子集
我们正在使用 Webfont Loader 加载 google 字体。在 WebFont.load 的活动回调中,我们加载主脚本和 bootstrap angular.js 应用程序。
<script type="text/javascript">
WebFontConfig = {
google: {
families: ['Open Sans:400,700,700i,400i:latin-ext']
},
active: function() {
var mainScript = document.createElement('script');
mainScript.src = "/js/main.js";
mainScript.onload = function() {
angular.bootstrap(document, ['cob']);
}
document.body.appendChild(mainScript);
}
};
WebFont.load(WebFontConfig);
</script>
为了让浏览器在加载 google 字体文件之前使用默认字体,我们为 .wf-active class
设置了字体html.wf-active {
font-family: 'Open Sans', sans-serif;
}
在 angular 运行 中,我们切换应用程序并从加载程序中清除屏幕并显示应用程序。
angular.module('mymodule')
.run([function() {
$rootScope.appLoaded = true;
}
]);
html
<body>
<div class="app-loader" ng-hide="appLoaded">loading...</div>
<div class="page-container" ng-if="appLoaded">
application loaded. <button>GİRİŞ</button>
</div>
</body>
我们看到 "loading..." 直到字体文件加载,然后应用程序 bootstrap 成功。 但是按钮文本呈现为 "G R " 几秒钟,一段时间后“İ”和“Ş”字符加载到屏幕上,我们在按钮上看到 GİRİŞ。
我确定字体文件在应用程序 bootstraps 之前加载,因为字体在应用程序加载后不会改变。
可能无关紧要,但是,我在页面上找到了一些图像文件,并且外来字符与图像文件一起呈现。因此存在某种奇怪的屏幕渲染延迟。
我们只在 iOS 应用程序上遇到此问题,我已经在 iPhone 6 和 6s 以及 xcode 模拟器上对其进行了测试。 这在浏览器(safari、chrome 和 firefox)和我们使用相同的 cordova 项目创建的 android 应用程序上按预期工作。
尝试了各种preload方法,正想放弃的时候,突然发现一个事实here
most browsers download fonts when they're used in a page rather than when they're declared in CSS.
该字体的 latin-ext 子集似乎被延迟,直到它在页面内部使用。
我已经通过放置一个虚拟字符 (©) 解决了这个问题,这将使它在加载屏幕上下载 latin-ext 子集