2017-10-15 128 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);';' –