userChrome.jsでDOMContentLoaded
サイト既存の何かが阻害して、画像を読み終わるまでGreasemonkeyスクリプトが動かない場合があったみたい。(GreasemonkeyがDOMContentLoadedにlistenされているのは知っていたけど、この現象を何回も見かけたので誤解したらしい)何だろこれ。
シンプルにまとめるとこんな感じで、DOMContentLoadedのイベントリスナーをつけてDOM構築時に実行できる。
var startDomContentLoaded = function(event) {
var doc = event.target; // document
var safeWindow = doc.defaultView; //window
if(safeWindow.location.href.indexOf('判定URL') != -1) {
// やりたい処理
}
}
gBrowser.addEventListener('DOMContentLoaded', startDomContentLoaded, false);
今回やりたかったことは、任意のサイトにjQueryとjQueryプラグインを読み込ませて実行させるという事をやりたかった。
var startDomContentLoaded = function(event) {
var doc = event.target; // document
var safeWindow = doc.defaultView; //window
if(safeWindow.location.href.indexOf('http://mediamarker.net/') != -1) {
var scriptjQuery = doc.createElement("script");
scriptjQuery.type = 'text/javascript';
scriptjQuery.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js";
doc.body.appendChild(scriptjQuery);
var scriptLazy = doc.createElement("script");
scriptLazy.type = 'text/javascript';
scriptLazy.src = "http://gist.github.com/raw/391939/9bccd0b20ed2866750c2749013893dea0e5f0e95/jquery.lazyload.js";
doc.body.appendChild(scriptLazy);
}
evalInPage(function(){
$("img").lazyload({ threshold : 200 });
})
function evalInPage(fun) {
safeWindow.location.href = "javascript:void (" + fun + ")()";
}
}
gBrowser.addEventListener('DOMContentLoaded', startDomContentLoaded, false);
script.onloadにしようとしたけど、動かなかった。(多分セキュリティ関係だと思う)userChrome.jsでGreasemonkey的な事をやるときにwindowやdocumentに相当するものが何かと分かると作りやすくなると思う。
追記:GreasemonkeyがDOMContentLoadedで実行されることが確認できたので、Greasemonkeyで同じ事をやる場合、次のようになりました。
簡単ですね。
コメント(0件)
- TB-URL http://efcl.info/adiary/037/tb/