selectandなどの適切なイベントがない場合(イベントはありますが、フォームコントロールにのみ適用されるselectstartFirefox には実際にはありません)、質問で提案したように、マウスとキーボードのイベントを使用することしかできません。selectドキュメント内のすべてのイベントの既定のアクションを防止するmousedownことは、リンクやフォーム要素などのすべてのインタラクティブな要素が機能しなくなるため、適切ではありません。代わりに、マウスとキーボードを使用して行われた選択をザッピングする次のようなことを行うことができます。
ただし、Firefox ではそれらを検出する方法がまったくないため、コンテキスト メニューと編集メニューの [すべて選択] による選択を妨げることはありません。これに対処する必要がある場合は、選択をポーリングすることが唯一の希望です。
function killSelection() {
window.getSelection().removeAllRanges();
}
document.addEventListener("mousedown", function(evt) {
document.addEventListener("mousemove", killSelection, false);
}, false);
document.addEventListener("mouseup", function(evt) {
document.removeEventListener("mousemove", killSelection, false);
}, false);
document.addEventListener("keydown", killSelection, false);
window.addEventListener("blur", function(evt) {
document.removeEventListener("mousemove", killSelection, false);
}, false);