1

我在想,如果在Chrome代碼中我們有一些更好的方法來檢測用戶選擇/突出顯示當前頁面中的某些內容,而不是偵聽keyup/mouseup並檢查window.getSelection()。有任何想法嗎?在Firefox擴展中處理文本選擇事件(阻止用戶選擇文本)

編輯:其實,我想要做的只是防止用戶在contentDocument中選擇任何文本。完成這件事情也會很好。 (獲得選擇活動背後的想法只是爲preventDefault()或其他getSelection().removeAllRanges()

edit2:請注意,我不僅需要防止突出顯示,而是選擇發生。

edit3:我不需要防止複製,而是選擇的元素。

+0

IE和Opera實現不可選擇屬性(BTW) – 2011-03-06 16:46:35

回答

4

如果你把下面的素文字在你的身體,選擇將在Firefox中禁用:

<script type="text/javascript"> 
    document.body.style.MozUserSelect = "none"; 
    document.body.style.cursor = "default"; 
</script> 

它不僅禁用的亮點,它還會禁用的選擇本身。如果您嘗試通過鼠標或箭頭鍵(點擊某個位置並使用箭頭鍵導航,同時按下SHIFT)並按STRG+C來選擇區域,則不會發生任何事情。

改變之後唯一可行的選擇是STRG+A(不選擇可見,但STRG+A & STRG+C copys全部)。通過鍵盤事件可以避免這種情況。


編輯:我看到你的鏈接發表評論我要Mozilla Doc Center,雖然他們寫它控制的只是表象,我在Firefox 3.6中所有的測試表明,它也影響選擇,不僅外觀。但它也可能在將來的版本中改變...

1

您可以使用CSS來防止用戶選擇文本。看到這裏我的答案:How to disable text selection highlighting using CSS?

要通過JavaScript在Firefox中設置此,您可以執行以下操作:

document.body.style.MozUserSelect = "-moz-none"; 
+0

禁用純文本高亮的外觀:([「控制選擇的外觀(只)這對實際選擇操作沒有任何影響。「](https://developer.mozilla.org/en/CSS/-moz-user-select))。我真的需要完全禁用它。 – CAFxX 2011-03-06 16:32:26

+0

@CAFxX:在這種情況下,您將返回檢查鍵和鼠標事件('keydown'和'mousedown'會比'keyup'和'mouseup'好),它不支持'select'或'selectstart'事件用於一般選擇。即使這還不夠,因爲可以通過其他方式更改選擇,例如編輯和上下文菜單中的「全選」選項。 – 2011-03-06 17:07:41

1

複製命令有效時,由一個事件禁用。您可以通過創建命令更新程序來獲得有關此事件的通知。

<commandset commandupdater="true" events="select" 
      oncommandupdate="setTimeout(selectNone, 0);"/> 
+0

我需要徹底禁用選擇元素的能力,而不是禁用複製命令。 – CAFxX 2011-03-12 15:46:30

2

在沒有合適的事件,如selectselectstart(這確實是沒有在Firefox中,它具有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); 
2

您可以使用CSS

-webkit-user-select: none; 
-khtml-user-select: none; 
-moz-user-select: none; 
-o-user-select: none; 
user-select: none;