@jasssonpetは彼の答えで私のお尻を救った。そうは言っても、私はそれをもう少し単純なものに変更しました(私の意見では)。
**なぜそれがそのように行われたのかよくわかりませんが、知っているなら私に教えてください。それが単なる好みである場合は、他の誰かの好みが私のものとよりよく一致する可能性があるため、コードサンプルを共有しています。
// just create the style tag and set the page size
function setPageSize(cssPageSize) {
const style = document.createElement('style');
style.innerHTML = `@page {size: ${cssPageSize}}`;
document.head.appendChild(style);
}
// how to use it
setPageSize('letter landscape');
編集:私は久しぶりにログインし、@ jasssonpetの答えを見ましたが、今ではもっと理にかなっています。他の誰かが混乱している場合、彼のアプローチの主な利点は2つのことです。
- 彼はクロージャを利用して、参照および変更できるスタイルタグがページに1つだけ追加されるようにします。
- 彼はcssPagedMediaを拡張して、追加されたメソッドに名前空間が付けられるようにします。このようにして、グローバル名前空間が汚染されることはありません。
これがクラス形式です(私は理解しやすいと思います):
class SingletonStyle {
constructor() {
this.style = document.createElement("style");
document.head.appendChild(this.style);
}
apply(rule) {
this.style.innerHTML = rule;
}
size(size) {
this.apply("@page {size: " + size + "}");
}
}