MyMixi Them All
by
amachang
2010-05-18 [2010/05/18 00:29:06]
WebKit 系でしか動きません><
@@ -1,6 +1,6 @@
/*
* @title MyMixi Them All
- * @description まだ作ってる中
+ * @description WebKit 系でしか動きません><
* @include http://mixi.jp/
* @license MIT License
* @require JSDeferred
/*
* @title MyMixi Them All
* @description WebKit 系でしか動きません><
* @include http://mixi.jp/
* @license MIT License
* @require JSDeferred
* @require jquery
* @require http://jquery-ui.googlecode.com/svn/trunk/tests/jquery.simulate.js
*/
Deferred = D();
Deferred.iframeId_ = 0;
Deferred.iframe = function iframe(url) {
var iframeName = 'name-' + Deferred.iframeId_++;
var iframeEl = document.createElement('iframe');
iframeEl.name = iframeName;
document.body.insertBefore(iframeEl, document.body.firstChild);
console.log('Open URL: ' + url);
var d = new Deferred();
iframeEl.onload = function() {
var win = iframeEl.contentWindow;
if (win.location.toString() !== 'about:blank') {
console.log('Loaded: ' + url);
setTimeout(function() { d.call(win); }, 1);
iframeEl.onload = null;
}
};
iframeEl.src = url;
return d;
};
Deferred.xpath = function xpath(expr, ctx, callback) {
var doc = ctx.nodeType === 9 ? ctx : ctx.ownerDocument;
var r = doc.evaluate(expr, ctx, null, 7, null);
return Deferred.loop(r.snapshotLength, function (i) {
return callback(r.snapshotItem(i), r, i, expr);
});
};
Deferred.clickAndWait = function clickAndWait(el) {
var iframeName = 'name-' + Deferred.iframeId_++;
var iframeEl = document.createElement('iframe');
iframeEl.name = iframeName;
document.body.insertBefore(iframeEl, document.body.firstChild);
if (el.tagName === 'A') {
el.target = iframeName;
}
else if (el.form) {
el.form.target = iframeName;
}
console.log('Fire click: ' + el.tagName);
var d = new Deferred();
iframeEl.onload = function() {
var win = iframeEl.contentWindow;
if (win.location.toString() !== 'about:blank') {
console.log('Loaded: ' + win.location);
setTimeout(function() { d.call(win); }, 1);
iframeEl.onload = null;
}
};
jQuery(el).simulate('click');
return d;
};
with(Deferred) {
xpath('//a[contains(@href, "show_friend.pl")]', document, function(el) {
return iframe(el.href).
next(function(win) {
return xpath('//a[contains(@href, "add_friend.pl")]', win.document, function(el) {
return clickAndWait(el).
next(function(win) {
win.document.getElementById('message').value = 'よろしくおねがいします!';
var btnEls = win.document.getElementsByClassName('formBt01');
if (btnEls.length) {
return clickAndWait(btnEls[0]).
next(function(win) {
jQuery(win.document.getElementsByClassName('formBt01')[0]).simulate('click');
return wait(100);
});
}
else {
return wait(100);
}
});
});
});
}).
next(function() {
alert('finish!');
}).
error(function(e) {
alert('Error: ' + e.message + '\nStack: ' + e.stack)
console.log(e.message, e.stack)
});
}
void(0);
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。