2017-10-15 4 views
0

WebExtensionを開発しています。編集可能なフィールドにコンテキストメニュー項目があり、選択すると確認ウィンドウが開き、編集可能なフィールドに値がペーストされます。Webエクステンションから編集可能なフィールドにテキストを挿入する

現在のところ、ウィンドウを開くコンテキストメニュー項目がありますが、編集可能なフィールドにテキストを挿入するのは面倒です。私がこれまで管理している最も近いです:

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-editable-of-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); '; ' –

関連する問題