2017-10-15 133 views
0

我正在开发一个WebExtension,一个功能是在可编辑字段上有一个上下文菜单项,当它被选中时打开一个确认窗口,然后将一个值粘贴到可编辑字段中。从网络扩展插入文本到可编辑字段

目前我有上下文菜单项,它打开窗口,但获取一些插入到可编辑字段的文本是棘手的。到目前为止,我所管理的最接近的是:

let code = 'setTimeout(function() {document.designMode = "on";document.execCommand("insertText", false, "apple");document.designMode = "off";}, 1000);'; 
browser.tabs.executeScript(parent_tab_id, {"code": code}); 
window.close() 

整个designMode事情似乎就有点不可思议,并且代码不很可靠地工作。有一个更好的方法吗?问题的根源在于我没有找到任何方法来找到被点击的可编辑字段。

+1

请参见[此问题](https://stackoverflow.com/questions/28055887/is-there-a-flexible-way-to -modify-the-an-an-an-editable-element),这有帮助吗? – Xan

回答

0

我会做这样的:

let code = 'document.activeElement.value = "apple";'; 
browser.tabs.executeScript(parent_tab_id, {"code": code}); 

顺便说一句,window.close内背景脚本browser.tabs.remove(currentTabId)。您可以通过查询选项卡API(示例2)获取当前选项卡ID:https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/query#examples

+0

我不清楚,但代码实际上是在弹出窗口中运行,而不是后台脚本,因此window.close()。 –

+1

document.activeElement正是我​​所需要的。为了不消除所有内容,产生的代码是:'let code ='document.activeElement.value = document.activeElement.value.substr(0,document.activeElement.selectionStart)+“apple”+ document.activeElement .value.substr(document.activeElement.selectionEnd);';' –