Firefox扩展:如何设置光标位置?

时间:2010-09-15 14:17:38

标签: firefox firefox-addon

我有一个页面,可能有几个内容可编辑的iframe(编辑器)。

现在我想使用我的自定义Firefox扩展来执行以下操作: 将光标设置为光标实际所在的编辑器的结尾(或最后一个HTML元素)。

我找到了许多解决方案来获取光标的位置,但我需要一个来设置它。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

XPCOM可能包含此类功能,作为测试装备的一部分。 Mochitest至少能够做到这一点(再次,可能是XPCOM)。

另一方面,当用户在系统上时,这通常是对用户交互实践的严重违反。确保你有充分的理由这样做。看起来很方便,但是如果他们在使用你的插件时做了别的什么呢?我通常会同时打开各种应用程序,Fx扩展只是其中的一部分。我不希望它控制我的鼠标,永远。

设置焦点有问题吗?至少那只会迫使用户的手在窗口级别。

它还怀疑它很难通过AMO审查。你必须证明为什么有必要调用这种低级功能。例如,如果您与窗口进行交互,窗口可能会影响您的功能输入,而这些功能又控制鼠标......然后随机网站可以访问用户的窗口!

答案 1 :(得分:1)

自己找到解决问题的方法。这段代码自己将Cursor位置设置为我的编辑器的最后一段:

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