セッターのコードを使用して、コンテンツ スクリプトからオブジェクトのプロパティjQuery
を定義しようとしています。window
そうすれば、実際の jQuery オブジェクトが定義されたら、すぐに使用できます。しかし、私はそれを正しくすることができないようです。
ターゲット Web サイトは Outlook.com です。それが Outlook の Web メール版です。
コードをコンテンツスクリプトに直接入れようとしましたが、マニフェスト"all_frames": true
のcontent_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
、うまくいきます。プロパティの定義に問題があるだけです。