2010-09-15 58 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