XMLHttpRequest
このようなリクエストを通じてページ上でデータが更新されていることをユーザースクリプトに知らせるために、の sendをオーバーライドしたいと考えています。私のオーバーライドコードは次のようになります。
var oldSend = unsafeWindow.XMLHttpRequest.prototype.send;
unsafeWindow.XMLHttpRequest.prototype.send = function(){
console.log("notified of XHR update");
oldSend.apply(this, arguments);
}
これをページに挿入すると(unsafeWindow
参照なしで)正常に機能しますが、これをユーザースクリプトスコープから機能させたいと思います。 unsafeWindow
これは Firefox では機能しますが、Chrome では機能しません。そこで、Brock Adams の気の利いたトリックを利用してunsafeWindow
、Chrome で機能するものを作成しました。
var bGreasemonkeyServiceDefined = false;
try {
if (typeof Components.interfaces.gmIGreasemonkeyService === "object") {
bGreasemonkeyServiceDefined = true;
}
}
catch (err) {
//Ignore.
}
if ( typeof unsafeWindow === "undefined" || ! bGreasemonkeyServiceDefined) {
unsafeWindow = ( function () {
var dummyElem = document.createElement('p');
dummyElem.setAttribute ('onclick', 'return window;');
return dummyElem.onclick ();
} ) ();
}
ただし、2つを組み合わせても何も起こりません。すべてコンソールに貼り付けて動作しますが、ユーザースクリプトから実行してもエラーも出力もありません。私は何か間違ったことをしていますか、それともおそらくこれはこのトリックの能力を超えていますか?
うーん、次のような簡単なことを試してみましunsafeWindow.document.title = 'testing';
たが、それも機能しないため、に固有のものではない可能性がありXMLHttpRequest
ます。
可能な限り、ページへの挿入を回避しようとしています。