@@ -124,6 +124,8 @@ var Fonts = (function Fonts() {
124
124
})();
125
125
126
126
var FontLoader = {
127
+ listeningForFontLoad : false ,
128
+
127
129
bind : function (fonts , callback ) {
128
130
function checkFontsLoaded () {
129
131
for (var i = 0 ; i < fonts .length ; i ++) {
@@ -196,6 +198,9 @@ var FontLoader = {
196
198
// goes really wonkily, we expect the @font-face for the outer
197
199
// document to be processed before the inner. That's still
198
200
// fragile, but seems to work in practice.
201
+ //
202
+ // The postMessage() hackery was added to work around chrome bug
203
+ // 82402.
199
204
200
205
var div = document .createElement ("div" );
201
206
div .setAttribute ("style" ,
@@ -209,6 +214,28 @@ var FontLoader = {
209
214
div .innerHTML = html ;
210
215
document .body .appendChild (div );
211
216
217
+ if (!this .listeneningForFontLoad ) {
218
+ window .addEventListener (
219
+ "message" ,
220
+ function (e ) {
221
+ var fontNames = e .data ;
222
+ // Firefox 5 doesn't parse the JSON here. Welcome to the
223
+ // Wonderful Web World.
224
+ if ("string" == typeof (fontNames )) {
225
+ fontNames = fontNames .split ("," );
226
+ }
227
+ for (var i = 0 ; i < fontNames .length ; ++i ) {
228
+ var font = Fonts .lookup (fontNames [i ]);
229
+ font .loading = false ;
230
+ }
231
+ var evt = document .createEvent ("Events" );
232
+ evt .initEvent ("pdfjsFontLoad" , true , false );
233
+ document .documentElement .dispatchEvent (evt );
234
+ },
235
+ false );
236
+ this .listeneningForFontLoad = true ;
237
+ }
238
+
212
239
// XXX we should have a time-out here too, and maybe fire
213
240
// pdfjsFontLoadFailed?
214
241
var src = '<!DOCTYPE HTML><html><head>' ;
@@ -224,15 +251,7 @@ var FontLoader = {
224
251
}
225
252
src += ' var fontNames=[' + fontNamesArray +'];\n' ;
226
253
src += ' window.onload = function () {\n'
227
- src += ' var Fonts = top.document.defaultView.Fonts;\n' ;
228
- src += ' for (var i = 0; i < fontNames.length; ++i) {\n' ;
229
- src += ' var font = Fonts.lookup(fontNames[i]);\n' ;
230
- src += ' font.loading = false;\n' ;
231
- src += ' }\n' ;
232
- src += ' var doc = top.document;\n' ;
233
- src += ' var evt = doc.createEvent("Events");\n' ;
234
- src += ' evt.initEvent("pdfjsFontLoad", true, false);\n'
235
- src += ' doc.documentElement.dispatchEvent(evt);\n' ;
254
+ src += ' top.postMessage(fontNames, "*");\n' ;
236
255
src += ' }' ;
237
256
src += '</script></head><body>' ;
238
257
for (var i = 0 ; i < names .length ; ++i ) {
@@ -1117,6 +1136,8 @@ var Font = (function () {
1117
1136
var rule = "@font-face { font-family:'" + fontName + "';src:" + url + "}" ;
1118
1137
var styleSheet = document .styleSheets [0 ];
1119
1138
styleSheet .insertRule (rule , styleSheet .cssRules .length );
1139
+
1140
+ return rule ;
1120
1141
}
1121
1142
};
1122
1143
0 commit comments