如何检测使用Firefox SDK(适用于插件)双击选择的文本?

坎塔卢普小姐

用户将双击网页中的一个单词,该插件应能够收听事件并获得所选的文本。

以供选择的SDK页面为例

get_definitions.port.on("text-entered", function (text) {
  console.log(text);
  text_entry.hide();
});

function myListener() {
  console.log(selection.text);
}

事情是检测到任何类型的选择。我需要的是通过双击选择文本时的检测...

我无法弄清楚如何添加事件侦听器来侦听网页上的双击事件。提个醒:

addEventListener('dblclick', function);

无效,因为插件的index.js无法直接与网页进行交互。因此,它必须继续侦听通过firefox SDK提供的“双击”事件,但是该怎么做呢?

坎塔卢普小姐

因此,插件必须在窗口中获取选定的文本:

插件无法直接操作窗口或选项卡。我的意思是它可以获得有关它的详细信息-例如所有活动标签页的列表,打开标签页,获取焦点等。

  1. 附加一个contentScript

但是要真正在较低级别上像“获取选定的文本”那样工作,Firefox SDK提供了“ Content Scripts ”。它们必须附加到目标选项卡。我们可以通过两种方式附加内容脚本“ someScript.js”:

您可以使用Tabs API直接附加

var tabs = require("sdk/tabs");

tabs.on('activate', function(tab) {
  var worker = tab.attach({
    contentScriptFile: data.url("someScript.js")
  });
});

或者您可以使用PageMod

var pageMod = require("sdk/page-mod");

pageMod.PageMod({
  include: "*.mozilla.org",
  contentScriptFile: data.url("someScript.js")
});

使用Tabs API和PageMod API确实存在区别:

Tabs API:您可以根据不同的标准(哪个选项卡,哪个状态等)来决定将contentScript附加到哪个选项卡。

PageMod API:附加到具有匹配URL模式的所有页面。

现在,附加的contentScript就像它是附加页面的一部分一样。

  1. 用someScript.js做一些事情:

在这种情况下,通过双击获取选定的文本:

//someScript.js
document.addEventListener('dblclick', function(){
        var selObj = window.getSelection();
        oRange = selObj.getRangeAt(0);
        var selectedText = selObj.toString();

        console.log(selectedText);
}, false);
  1. contentScript和main.js(附件)之间的通信:

如您所见,contentScript只是将选定的文本打印到控制台。要将其与Addon或main.js或index.js进行通信,我们需要使用“ port”对象

标签API:

var tabs = require("sdk/tabs");

tabs.on('activate', function(tab) {
  var worker = tab.attach({
    contentScriptFile: data.url("someScript.js")
  });

  //Keep listening on the port named "selectedText" from someScript.js
  worker.port.on("selectedText", function(sText) {
      console.log(sText);
  });
});

PageMod API:

var pageMod = require("sdk/page-mod");

pageMod.PageMod({
  include: "*.mozilla.org",
  contentScriptFile: data.url("someScript.js"),

  //Keep listening on the port named "selectedText" from someScript.js
  onAttach: function(worker) {
      worker.port.on("selectedText", function(sText) {
          console.log(sText);
      });
  }
});

将邮件从contentScript发送到main.js:

//someScript.js
document.addEventListener('dblclick', function(){
        var selObj = window.getSelection();
        oRange = selObj.getRangeAt(0);
        var selectedText = selObj.toString();

        console.log(selectedText);

        //emit the selected text on port named "selectedText"
        self.port.emit("selectedText", selectedText);
}, false);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使runProguard适用于android-library Gradle插件?

来自分类Dev

如何下载适用于Moonlight的Microsoft Media Pack插件?

来自分类Dev

如何安装适用于Mac的Visual Studio的AWS插件?

来自分类Dev

使用适用于iOS / Android的jQuery UI键盘插件

来自分类Dev

使用enable_if选择特征-适用于clang,但不适用于gcc

来自分类Dev

批量移动文件不适用于双击,但可从命令行使用

来自分类Dev

如何使禁用的选择框看起来像普通文本框(仅适用于CSS)

来自分类Dev

如何卸载适用于.NET 2.5的Azure SDK?

来自分类Dev

使用适用于iOS的Office-365-SDK

来自分类Dev

适用于iOS的Dropbox Core SDK(使用访问令牌)

来自分类Dev

如何形成适用于 Ands 和 Ors 的查询选择

来自分类Dev

使用库的链式选择不适用于动态加法

来自分类Dev

如何使用插件SDK调用Firefox printpreview

来自分类Dev

是否有适用于Chrome的类似于Firefox的插件容器?

来自分类Dev

如何检测operator []是否适用于Type?

来自分类Dev

如何检测是否安装了适用于Mac的Docker?

来自分类Dev

如何检测是否安装了适用于Mac的Docker?

来自分类Dev

使用 powershell 读取文本文件仅适用于 powershell 屏幕命令,而不适用于脚本

来自分类Dev

如何在Google Compute Engine中使用适用于PHP的Google App Engine SDK

来自分类Dev

如何使用适用于Javascript的AWS-SDK搜索CloudSearch域?

来自分类Dev

如何使用适用于 React-Native 的 AWS AppSync SDK 动态设置查询参数

来自分类Dev

Firefox-使用双击时如何获取所选文本

来自分类Dev

检测双击Firefox扩展按钮

来自分类Dev

如何使用仅适用于移动设备的Bootstrap隐藏部分文本

来自分类Dev

如何使用仅适用于移动设备的Bootstrap隐藏部分文本

来自分类Dev

如何更新适用于Google-chrome的Oracle Java插件?

来自分类Dev

VueJS-模型绑定不适用于使用jQuery插件的输入

来自分类Dev

适用于Jenkins的Docker插件错误:脚本无法使用方法

来自分类Dev

使用适用于Eclipse Luna的Oracle Weblogic Server插件启动错误

Related 相关文章

  1. 1

    如何使runProguard适用于android-library Gradle插件?

  2. 2

    如何下载适用于Moonlight的Microsoft Media Pack插件?

  3. 3

    如何安装适用于Mac的Visual Studio的AWS插件?

  4. 4

    使用适用于iOS / Android的jQuery UI键盘插件

  5. 5

    使用enable_if选择特征-适用于clang,但不适用于gcc

  6. 6

    批量移动文件不适用于双击,但可从命令行使用

  7. 7

    如何使禁用的选择框看起来像普通文本框(仅适用于CSS)

  8. 8

    如何卸载适用于.NET 2.5的Azure SDK?

  9. 9

    使用适用于iOS的Office-365-SDK

  10. 10

    适用于iOS的Dropbox Core SDK(使用访问令牌)

  11. 11

    如何形成适用于 Ands 和 Ors 的查询选择

  12. 12

    使用库的链式选择不适用于动态加法

  13. 13

    如何使用插件SDK调用Firefox printpreview

  14. 14

    是否有适用于Chrome的类似于Firefox的插件容器?

  15. 15

    如何检测operator []是否适用于Type?

  16. 16

    如何检测是否安装了适用于Mac的Docker?

  17. 17

    如何检测是否安装了适用于Mac的Docker?

  18. 18

    使用 powershell 读取文本文件仅适用于 powershell 屏幕命令,而不适用于脚本

  19. 19

    如何在Google Compute Engine中使用适用于PHP的Google App Engine SDK

  20. 20

    如何使用适用于Javascript的AWS-SDK搜索CloudSearch域?

  21. 21

    如何使用适用于 React-Native 的 AWS AppSync SDK 动态设置查询参数

  22. 22

    Firefox-使用双击时如何获取所选文本

  23. 23

    检测双击Firefox扩展按钮

  24. 24

    如何使用仅适用于移动设备的Bootstrap隐藏部分文本

  25. 25

    如何使用仅适用于移动设备的Bootstrap隐藏部分文本

  26. 26

    如何更新适用于Google-chrome的Oracle Java插件?

  27. 27

    VueJS-模型绑定不适用于使用jQuery插件的输入

  28. 28

    适用于Jenkins的Docker插件错误:脚本无法使用方法

  29. 29

    使用适用于Eclipse Luna的Oracle Weblogic Server插件启动错误

热门标签

归档