当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2018年3月7日水曜日

XPagesでコピー/貼り付け禁止を設定してみよう

皆さん、こんにちは。
3月になり花粉の飛散が本格化してきました。
毎年毎年、花粉対策の新しい商品が販売されたり手法が紹介されたりしますが、全員に有効なものなどなさそうですね。自分に合った療法をしていくしかなさそうです。
ということで、今日も花粉に悩まされています(笑)

さて、今日もXPagesの話題です。
Webページで文字列を入力するときに、コピーしてほしくないとか値を貼り付けてほしくないという時があるかと思います。
実際にメールアドレスを入力するページなど、値が間違っていたら困るときに、2回入力させて同じ値が入っているかどうかを確認することがあるでしょう。
この時に、貼り付けが可能であれば、間違った値が2回連続で入力されてしまう可能性があります。

こういったことを防ぐ方法の紹介です。
コピーを禁止する場合、"oncopy"というイベントに対して、"return false"を設定することで、そのイベントを強制終了させればいいのです。

XPagesでのやり方には2種類あります。
ページ全体に禁止の設定を施すのか、それとも各入力フィールドごとに設定を施すのかです。


1.ページ全体に設定を施す

こちらは簡単です。
XPageの「onClientLoad」イベントに次の式を記述します。

document.body.setAttribute( "oncopy", "return false" );            // コピー禁止
document.body.setAttribute( "onpaste", "return false" );        // 貼り付け禁止
document.body.setAttribute( "oncontextmenu", "return false" );    // コンテキストメニュー禁止


これでページ全体でコピーや貼り付けができなくなります。
ちなみに、コンテキストメニューはマウスで右クリックしたときに表示されるメニューのことです。



2.各フィールドごとに設定を施す

こちらはちょっと複雑です。
各入力フィールド(通常、編集コントロールボックス)にはイベントが定義してありますが(下図参照)、ここにoncopyやonpasteのイベントは存在しません。
編集ボックスコントロールの定義済みイベント

そこで、ページ全体で設定したときに使った「setAttribute」関数に目を付けます。
この関数は属性を付与するというものですから、編集ボックスコントロールに属性を追加すればいいのです。
「すべてのプロパティ」にある「attrs」をクリックすると[+][-]が表示されるので、さらに[+]をクリックします。
すると、「attr[0]」が追加されるので、「name」に"oncopy"を、「value」に"return false"を設定します。
attrの追加

これでこのフィールドの値をクリップボードにコピーすることができなくなります。
なお、入力フィールドに対してコピー禁止を設定する場合、あわせて「切り取り禁止」の設定を行っておく必要があります。
そうしないと、Ctrl+Xで値を切り取ってしまうことができます。
こちらは"oncut"という属性を追加して、同じくvalueには"return false"を設定すればよいでしょう。



いかがでしょうか?
一見、設定がないからできない・・・というような場合でも、工夫すればXPagesで行うことができます。
すぐにあきらめないで、アプローチの仕方を変えてチャレンジしてみましょう。



それでは今日はこの辺で・・・



Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: