setInterval によってページ内の他のスクリプトがブロックされる可能性はありますか?
Gmail 関連のブックマークレットを Google Chrome 拡張機能に変換するプロジェクトに取り組んでいます。ブックマークレットは、gmail グリースモンキー API を使用して gmail ページと対話します。API の JavaScript オブジェクトは、Gmail ページで最後に読み込まれる部分の 1 つで、XMLHttpRequest を介してページに読み込まれます。このオブジェクトにアクセスする必要があり、グローバル JavaScript 変数は拡張コンテンツ スクリプトから隠されているため、gmail ページにスクリプトを挿入して、変数の定義をポーリングし、変数の定義にアクセスします。setInterval 関数を使用してポーリングを行っています。これは約 80% の確率で機能します。残りの時間は、設定した制限に達するまでポーリング機能がポーリングを続け、グリースモンキー API オブジェクトがページで定義されることはありません。
挿入されたスクリプトのサンプル:
var attemptCount = 0;
var attemptLoad = function(callback) {
if (typeof(gmonkey) != "undefined"){
clearInterval(intervalId); // unregister this function for interval execution.
gmonkey.load('1.0', function (gmail) {
self.gmail = gmail;
if (callback) { callback(); }
});
}
else {
attemptCount ++;
console.log("Gmonkey not yet loaded: " + attemptCount );
if (attemptCount > 30) {
console.log("Could not fing Gmonkey in the gmail page after thirty seconds. Aborting");
clearInterval(intervalId); // unregister this function for interval execution.
};
}
};
var intervalId = setInterval(function(){attemptLoad(callback);}, 1000);