Issue投げたやつ。
最初質問した時点では、browser console と web console を勘違いしてました。
マニュアルにも追記されたため、もう勘違いする人も出ないはず(白目
後、config.js 内部で content オブジェクトにアクセスするのは「terrible hack」らしい(e10s環境)
これも全然気付いてなかったので、マニュアルに従い、frame.jsと組み合わせた。
コード
最終的に上手くいったコードが以下。
以前の記事で書いた「選択文字列をGoogle翻訳」の処理を変えただけですねこれ。
config.js
vimfx.addCommand({ name: 'copy_ex', description: 'c_"# <title>\\n<URL>"でURLコピー', category: 'location', }, ({vim}) => { let url = vim.window.gBrowser.selectedBrowser.currentURI.spec // ここで指定してはいけない。frame.jsで取得した値を使用すること。 // let title = vim.window.content.document.getElementById("ja").innerHTML vimfx.send(vim, 'getElementById', {id: 'ja'}, title => { let fmt = "# "+title+"\n"+url gClipboardHelper.copyString(fmt) vim.notify("Copied String: " + fmt) }) })
frame.js
// 指定IDの文字列を返す vimfx.listen('getElementById', ({id}, callback) => { let elem = content.document.getElementById(id) let title = (elem != null) ? elem.innerHTML : content.document.title callback(title) })
指定したIDが存在するならそのIDの内容をコピー、
存在しなければページのタイトルをコピーする。
これでまた少し便利になった。