2010-09-15 60 views
0

我有一個頁面,可能有幾個內容可編輯的iframe(編輯器)。Firefox擴展:如何設置光標位置?

現在我想用我的自定義Firefox擴展,做到以下幾點:。 光標設置爲編輯器中的光標實際上是在年底(或最後一個HTML元素)

,我發現許多解決方案獲取光標的位置,但我需要一個來設置它。

有什麼建議嗎?

回答

1

找到我自己的問題的解決方案。此代碼我自己將光標位置設置爲我編輯器的最後一段:

var frame = window.content.document.getElementsByTagName('iframe')[2]; 
var win = frame.contentWindow; 
var editingSession = Components.classes["@mozilla.org/editor/editingsession;1"].createInstance(Components.interfaces.nsIEditingSession); 
var editor = editingSession.getEditorForWindow(win); 

selection = window.getSelection();    

var body = frame.contentDocument.body; 

text = frame.contentDocument.createTextNode("."); 
body.lastChild.appendChild(text); // add textnode to be selected 

var range = editor.document.createRange(); 
range.setStartBefore(text); 
range.setEndAfter(text); 
editor.selection.removeAllRanges(); 
editor.selection.addRange(range); 

body.lastChild.removeChild(text); // remove Child 
2

XPCOM可能包含這些功能,作爲測試裝置的一部分。 Mochitest至少可以做到這一點(再次,可能通過XPCOM)。

另一方面,當用戶在系統上時,這通常會嚴重違反用戶交互操作。確保你有一個很好的理由來做到這一點。這看起來很方便,但如果他們在使用插件時做了其他事情呢?我通常一次打開各種應用程序,Fx擴展只是其中的一部分。我不想讓它控制我的鼠標,永遠。

設置焦點有問題嗎?至少這隻會迫使用戶的手在窗口水平。

它也懷疑這讓它非常難以通過AMO審查。你必須證明爲什麼有必要調用這樣的低級功能。例如,如果您與一個窗口進行交互,該窗口可能會影響您的功能的輸入,從而控制鼠標......然後隨機的網站可以訪問用戶的窗口!

+0

AMO審查對我來說不是必需的,我開發的擴展是針對我們的客戶之一。爲了得到一個用粗體標籤代替拼寫單詞中的拼寫檢查替換錯誤的解決方法,一個解決方案是在其他地方手動設置光標(至少如果我手動將它作爲用戶來操作)。在拼寫錯誤的單詞被替換之後,光標正被拼寫檢查器設置爲已取消單詞的結尾 - 所以用戶不會意識到光標移動。 – Thariama 2010-09-15 14:35:10

+0

對不起,看起來很愚蠢的問題:你能否詳細說明你的遊標定義? – Rushyo 2010-09-15 14:41:55

+0

光標(位置)是閃爍「|」的位置站立,當用戶鍵入一個字母時,它會被寫下來(在可編輯的上下文中) – Thariama 2010-09-15 14:55:04