ページの(JSの)コンテキストと拡張機能側(content.js)のコンテキストは別ですので、ページ内JSで定義されたものには直接アクセスすることはできません。
やるとすれば、一応、ページとcontent_sc間でデータのやり取りを行う方法はいくつかありますが(window.postMessageやchrome.runtime.sendMessage等)、私がよく使う方法は、DOMのイベントはページはもちろんですがcontent.js上でもハンドルすることができるので、CustomEventを使い独自のイベントを発行することでページとcontent.js間で連携させるというものです。
ちょっと、冗長的なコードとなりますが、これにより一応、content.jsからページ上の変数や関数の実行を行うことができるようになります。
js
1const script = document.createElement('script');
2const code = '(' + function () {
3 window.addEventListener('execPageFunc', arg => {
4 const res = pageFunc(arg.detail);
5 window.dispatchEvent(new CustomEvent('pageFuncResult', { detail: res }));
6 });
7} + ')()';
8script.text = code;
9// documentにexecPageFuncイベントハンドラを設定する関数を記述したスクリプト(<script>)を追加。
10// documentに追加された<script>はページのコンテキストで実行されるのでページ上のJavaScriptで定義されたものにアクセスできる。
11document.head.appendChild(script);
12
13const arg = {
14 hoge: 'fuga'
15};
16// content.jsからexecutePageFuncイベントを発火
17window.dispatchEvent(new CustomEvent('execPageFunc', { detail: arg }));
18// pageFuncResultイベントハンドラ設定
19// このイベントによりpageFunc()実行結果を取得
20window.addEventListener('pageFuncResult', arg => {
21 const res = arg.detail;
22 console.log(res);
23});
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/18 00:38 編集