id:IkeTさんがUbiquityでスクレイピング的な事を試してまして、参考にさせていただいていました。
で、エキサイト翻訳で文字化けする件があって、対処されていたのですが。
teramakoさんのご指摘を受けてjQuery.get(url, data, callback)→XMLHttpRequestに変更し、overrideMimeTypeに"text/html; charset=Shift_JIS"を指定したところ、文字化けなく表示できました。
jQuery.ajax(options)への変更も検討してみましたが、内部ロジックでoverrideMimeTypeを指定する箇所が無かったため、使用できませんでした。
UbiquityでHTMLコンテンツとマッシュアップ - IkeTの日記
これ、jQueryでもできます。
Ajaxリクエストが送信される前に実行するコールバック関数を登録します。
http://stacktrace.jp/jquery/api/ajax/ajaxsend(callback).html
XMLHttpRequestオブジェクトが引数で渡されるので、コールバック関数でoverrideMimeTypeを上書きしちゃえばいいです。
なので、excite_en_jaコマンドをjQueryを使って書き換えると以下のような感じです。*1
var excite_en_ja = "http://www.excite.co.jp/world/english/";
CmdUtils.CreateCommand({
name: "test",
takes: {"text to translate": noun_arb_text},
description: "Translates from English to Japanese by Excite.",
preview: function(pblock, directObject) {
var Params = {
before: directObject.text,
wb_lp: "ENJA"
};
jQuery().ajaxSend(function(event, XMLHttpRequest, options){
XMLHttpRequest.overrideMimeType("text/plain; charset=shift_jis");
});
jQuery.ajax({
type: "GET",
url: excite_en_ja,
data: Params,
dataType: "text",
error: function() {
displayMessage("NG");
},
success: function(res) {
var document = context.focusedWindow.document;
var dummy = document.createElement("div");
jQuery(dummy).html(res);
var textarea = jQuery(dummy).find("textarea");
if(textarea) {
var previewContent = "";
textarea.each(function() {
if (this.name == "after") {
previewContent+="<p style='font-style:italic;color:lightgray;>";
} else {
previewContent+="<p>";
}
previewContent+=jQuery(this).text();
previewContent+="</p>";
});
jQuery(pblock).html(previewContent);
}
}
});
},
execute: function(directObject) {
}
});
ただ、このoverrideMimeTypeはコマンドラインを閉じでも保持され続けるようで*2、なんか、他のコマンドに悪影響が出そうでなんというか気持ち悪いですね。
追記
jQuery.ajax で overrideMimeType する方法 - hogehoge @teramako
↑overrideMimeTypeを保持してるんじゃなくて、ajaxSendがイベントとして保持されているとのこと。言われてみれば、毎回コンストラクタ使ってるわけだから当然ですよね、お恥ずかしい。リンク先の方法が全然良いので、そちらを参照して下さい。