相关疑难解决方法(0)

如何检索已执行上下文菜单的元素

我正在尝试编写一个google chrome扩展,我在其中使用了contextmenu.此上下文菜单仅适用于可编辑元素(例如输入文本).单击并执行contextmenu时,我想在回调函数中检索已执行contextmenu的元素(输入文本),以便更新与此输入文本关联的值.

这是我的扩展的骨架:

function mycallback(info, tab) {
  // missing part that refers to the question:
  // how to retrieve elt which is assumed to be 
  // the element on which the contextMenu has been executed ?
  elt.value = "my new value"
}

var id = chrome.contextMenus.create({
        "title": "Click me",
        "contexts": ["editable"],
        "onclick": mycallback
    });
Run Code Online (Sandbox Code Playgroud)

与mycallback函数关联的参数不包含用于检索右键单击元素的有用信息.这似乎是一个已知问题(http://code.google.com/p/chromium/issues/detail?id=39507)但几个月后没有任何进展.有人知道一个解决方法:没有jquery和/或jquery?

javascript dom contextmenu google-chrome-extension

34
推荐指数
1
解决办法
1万
查看次数

有一种灵活的方法来修改可编辑元素的内容吗?

学科:

我正在创建一个Google Chrome扩展程序,通过内容脚本和事件页面与网页进行交互.

我有当用户点击被归类为一个元素上出现的上下文菜单选项editablechrome.contextMenusAPI.

这些选项就像常用文本的快捷方式一样.当用户单击选项时,某些文本将放置在光标位置的元素内.如果用户突出显示文本,则会将其删除.


问题:

并非所有可编辑元素都可以以相同方式修改.

如果元素很简单textarea,则可以通过实现此解决方案来实现所需的结果:

但是,我不能假设我正常与正常人交往textarea.

可能的细微差别包括:

  • 文本区域隐藏在一个内部Iframe,这使得查找要与之交互的元素的过程复杂化(document.activeElement可能返回Iframe,而不是实际包含文本的元素).

  • <textarea>不会是一个<textarea>/ <input>所有,而是一个contentEditable <div>.该.value方法不能在这种情况下工作.

所以我正在寻找一种灵活的方法,可以优雅地处理所有边缘情况.


我试过的一些解决方案:

  • 选项1:
    我最初计划将值存储在系统剪贴板中.然后,我可以想象只是document.execCommand('paste')用来修改元素.然而,在尝试之后,这种方法似乎与我最初的方法具有相同的缺点.(请参阅此问题)

    此外,此方法将删除操作前剪贴板中的所有内容.这是不可取的,任何利用这种方法的解决方案都必须提供解决方法.

  • 选项2:
    我考虑的另一个选项是为字符串中的每个字符分派键盘事件.但是,使用此解决方案,您仍然遇到Iframe问题,并且它不允许您使用特殊的Unicode字符.┻━┻(ヽ(`Д')ノ(┻━┻

html javascript text dom google-chrome-extension

7
推荐指数
1
解决办法
1009
查看次数