1

セッターのコードを使用して、コンテンツ スクリプトからオブジェクトのプロパティjQueryを定義しようとしています。windowそうすれば、実際の jQuery オブジェクトが定義されたら、すぐに使用できます。しかし、私はそれを正しくすることができないようです。

ターゲット Web サイトは Outlook.com です。それが Outlook の Web メール版です。

コードをコンテンツスクリプトに直接入れようとしましたが、マニフェスト"all_frames": truecontent_scriptsセクションに入れても(コードがすべてのフレームに挿入されるため)、機能しません。

function afterInit(){
  var _jQuery;
  console.log('This gets logged');
  Object.defineProperty(window, 'jQuery', {
    get: function() { return _jQuery; },
    set: function(newValue) {
      _jQuery = $ = newValue;

      console.log('This is never logged!');

      $(document.body).append($('<span>I want to use jQuery here</span>'));
    }
  });
}
afterInit();

window.jQueryその後、実際の関数/オブジェクトによって適切に定義されていることを確認しましjQueryたが、セッター コードは実行されません。
メッセージパッシングでも試しました。コードを含むメッセージを文字列としてバックグラウンドスクリプトに送信しexecuteScript、正しいタブで実行するために使用しますが、これも機能しません。

chrome.runtime.sendMessage(
    {action:'jQueryPreInit', value: '('+afterInit.toString()+')();'});

そして、私のバックグラウンドスクリプトでは:

chrome.runtime.onMessage.addListener(function(message, sender, callback) {
  switch (message.action){
    case "jQueryPreInit": chrome.tabs.executeScript(sender.tab.id, {code: message.value});
  }
});

Object.definePropertyコードにコード以外のものを入れるとexecuteScript、うまくいきます。プロパティの定義に問題があるだけです。

4

2 に答える 2