just create one dummy element too, and centralize hackery
This commit is contained in:
parent
9bc06a9924
commit
6b72f8e98a
49
fonts.js
49
fonts.js
@ -149,7 +149,11 @@ var FontLoader = {
|
||||
for (var j = 0; j < length; j++)
|
||||
str += String.fromCharCode(data[j]);
|
||||
|
||||
worker ? obj.bindWorker(str) : obj.bindDOM(str, rules, names);
|
||||
var rule = worker ? obj.bindWorker(str) : obj.bindDOM(str);
|
||||
if (rule) {
|
||||
rules.push(rule);
|
||||
names.push(font.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -182,14 +186,25 @@ var FontLoader = {
|
||||
// our @font-face rule was loaded. However, the subdocument and
|
||||
// outer document can't share CSS rules, so the inner document
|
||||
// is only part of the puzzle. The second piece is an invisible
|
||||
// paragraph created in order to force loading of the @font-face
|
||||
// in the *outer* document. (The font still needs to be loaded
|
||||
// for its metrics, for reflow). We create the <p> first (in
|
||||
// |bindDom()| function below), for the outer document, then
|
||||
// create the iframe. Unless something goes really wonkily, we
|
||||
// expect the @font-face for the outer document to be processed
|
||||
// before the inner. That's still fragile, but seems to work in
|
||||
// practice.
|
||||
// div created in order to force loading of the @font-face in
|
||||
// the *outer* document. (The font still needs to be loaded for
|
||||
// its metrics, for reflow). We create the div first for the
|
||||
// outer document, then create the iframe. Unless something
|
||||
// goes really wonkily, we expect the @font-face for the outer
|
||||
// document to be processed before the inner. That's still
|
||||
// fragile, but seems to work in practice.
|
||||
|
||||
var div = document.createElement("div");
|
||||
div.setAttribute("style",
|
||||
'visibility: hidden;'+
|
||||
'width: 10px; height: 10px;'+
|
||||
'position: absolute; top: 0px; left: 0px;');
|
||||
var html = '';
|
||||
for (var i = 0; i < names.length; ++i) {
|
||||
html += '<span style="font-family:'+ names[i] +'">Hi</span>';
|
||||
}
|
||||
div.innerHTML = html;
|
||||
document.body.appendChild(div);
|
||||
|
||||
// XXX we should have a time-out here too, and maybe fire
|
||||
// pdfjsFontLoadFailed?
|
||||
@ -218,7 +233,7 @@ var FontLoader = {
|
||||
src += ' }';
|
||||
src += '</script></head><body>';
|
||||
for (var i = 0; i < names.length; ++i) {
|
||||
src += '<p style="font-family:\''+ fontName +'\'">Hello</p>';
|
||||
src += '<p style="font-family:\''+ fontName +'\'">Hi</p>';
|
||||
}
|
||||
src += '</body></html>';
|
||||
var frame = document.createElement("iframe");
|
||||
@ -891,7 +906,7 @@ var Font = (function () {
|
||||
});
|
||||
},
|
||||
|
||||
bindDOM: function font_bindDom(data, rules, names) {
|
||||
bindDOM: function font_bindDom(data) {
|
||||
var fontName = this.name;
|
||||
|
||||
// Add the @font-face rule to the document
|
||||
@ -900,17 +915,7 @@ var Font = (function () {
|
||||
var styleSheet = document.styleSheets[0];
|
||||
styleSheet.insertRule(rule, styleSheet.length);
|
||||
|
||||
var p = document.createElement("p");
|
||||
p.setAttribute("style",
|
||||
'font-family: "'+ fontName +'";'+
|
||||
'visibility: hidden;'+
|
||||
'width: 10px; height: 10px;'+
|
||||
'position: absolute; top: 0px; left: 0px;');
|
||||
p.innerHTML = 'Hello';
|
||||
document.body.appendChild(p);
|
||||
|
||||
rules.push(rule);
|
||||
names.push(fontName);
|
||||
return rule;
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user