解決済みですが、検索ワードを見て訪れた人の為に向けた回答をぶら下げます
印刷時にJSを無効させる
何をもって印刷時にJSを無効と言ってるのか定義が難しい所ではありますが、
おそらくJavaScriptにより変更した画面を取り消すという事が言いたいのだと思います。
しかし、それは不可能です。
JavaScriptは色々と小難しい計算やデータの加工が出来ますが、
最終的にはブラウザに提供したHTMLファイルを後付けで書き換える事で画面更新を促すものです。
そしてJavaScriptによるHTMLの変更は不可逆です。
一度変えてしまったHTMLは元には戻せません。
変数で保存しておいてelement.innerHTML = htmlString;
みたいなコードでゴリ押しではめ込むとかすれば元には戻せます。
またonbeforeprintやonafterprintというイベントも存在しているので、
Ctrl+Pのショートカットで印刷したいようなケースでも
元々存在していたHTMLを一時的に復元して印刷が終了したら元に戻すという事は可能です。
しかし、かなりコストがかさみますし、設置したイベントは剥がれるしでバグの温床になりがちで非現実的と言わざるを得ないでしょう。
なので額面通りに捉えた印刷時にJSを無効にするを選ぶのは不可能と考えた方が良いでしょう。
従って、JavaScriptによるHTMLの変更を許容しながら、
印刷の邪魔にならないようにするという方向を模索することになります。
そちらの意味では解決方法が2通りあります。
ページの状況に従って使い分けたり併用してください。
- 印刷を見越してHTMLのクリティカルな所は変更しない
- PC閲覧時と印刷時に適用するCSSを分ける
前述の通り、JavaScriptによるHTMLの変更は不可逆です。
なので、印刷を視野に入れるのであれば、印刷の邪魔にならない所だけ適用しましょう。
そしてPC等での閲覧時と、印刷時は適用するCSSを切り替えることが可能です。
CSS3のMedia Queriesなどが上げられますが、
他にも色々と手段が存在するので調査してみてください。
CSSファイルレベルで読み込みを分ける事も可能です。
印刷時のみ後付けで更にCSSを適用できますので、
印刷時に邪魔だなぁという要素を消し飛ばしたり、背景や罫線を整えたりということが可能です。
Wikipediaなんかは邪魔な右カラムを消し飛ばしてますね。
他にも、アコーディオンメニューを導入して、
クリックされていない項目は非表示になっているケースもありますが、
印刷時用CSSでdisplay: block;
で上書きしてやれば常に表示する事も可能です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/05 02:53