在Firefox中的光标位置插入文本的Javascript代码

Javascript code to insert text at cursor position in Firefox?

本文关键字:插入文本 Javascript 代码 位置 光标 Firefox      更新时间:2023-09-26

用例

当我在搜索引擎中键入查询时,有时引用是查询的一部分,所以引擎不会用无用的建议来打扰我。

任务

这个操作太频繁了,所以我想用一个快捷方式来完成。快捷方式部分不是问题所在,有一种方法可以为bookmarklet指定快捷方式。我不知道怎么做的是

  1. 获取当前文本区域。关于它,我只知道光标在那里。我不能假设任何id等。此外,我不想安装任何挂钩
  2. 插入",然后倒退一个字符

我期待一个一两行,我可以放在书签。

解决方案

由于没有人愿意回答,而我只是JavaScript的新手,我决定看看是否有一个插件能满足我的需求。选择权落在了Firemacs身上,因为我无论如何都在用它。

返回一个字符的代码本身就是简单的:

goDoCommand('cmd_charPrevious');

但是,插入文本的命令不起作用。但是粘贴命令也很简单:

goDoCommand('cmd_paste');

现在,它只剩下将""放在剪贴板中。这并不容易:

var str = Components.classes["@mozilla.org/supports-string;1"]
    .createInstance(Components.interfaces.nsISupportsString);
str.data = '""';
var trans = Components.classes["@mozilla.org/widget/transferable;1"]
    .createInstance(Components.interfaces.nsITransferable);
trans.addDataFlavor("text/unicode");
trans.setTransferData("text/unicode",str, str.data.length * 2);
var clipid = Components.interfaces.nsIClipboard;
var clip = Components.classes["@mozilla.org/widget/clipboard;1"]
    .getService(clipid);
clip.setData(trans,null,clipid.kGlobalClipboard);

然后我只是将这段代码修补到扩展中,而不是"Ctrl-h"绑定中,我不使用。问题解决了。现在我可以在Firefox中快速插入一对引号了。